国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Nacos 的底層實現(xiàn)原理 & 注冊中心的兩種調(diào)用方式

這篇具有很好參考價值的文章主要介紹了Nacos 的底層實現(xiàn)原理 & 注冊中心的兩種調(diào)用方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. Nacos 的底層實現(xiàn)原理

1.1 配置中心自動刷新實現(xiàn)原理

1.2? 注冊中心底層實現(xiàn)原理

2. Nacos 注冊中心的兩種調(diào)用方式

?2.1 RestTemplate?+ Spring Cloud LoadBalancer 的調(diào)用方式

2.2 使用 OpenFeign + Spring Cloud LoadBalancer?


1. Nacos 的底層實現(xiàn)原理

Nacos 的底層實現(xiàn)原理 & 注冊中心的兩種調(diào)用方式,springcloud,springcloud,微服務(wù)

1.1 配置中心自動刷新實現(xiàn)原理

Nacos 配置中心的自動刷新,其底層是基于長輪詢+事件驅(qū)動的方式來實現(xiàn)的。

長輪詢:客戶端通過發(fā)送HTTP長輪詢請求到Nacos服務(wù)器來實現(xiàn)配置更新的監(jiān)聽機(jī)制。這樣做的目的是減少頻繁的請求,同時能夠保證配置更新時能快速通知到客戶端。

事件驅(qū)動:當(dāng)注冊中心發(fā)生改變了,發(fā)生事件了,就會把這個事件推送給訂閱者。

對比長連接來理解長輪詢 >>

長連接(Persistent Connection):

  • 長連接是指在一次連接建立之后,客戶端和服務(wù)器之間的連接會保持活躍,直到其中一方顯式地關(guān)閉連接。
  • 長連接中,TCP連接默認(rèn)不會在傳輸了HTTP響應(yīng)后立即關(guān)閉,而是可以用來傳輸多個請求和響應(yīng)。
  • 長連接減少了頻繁建立和關(guān)閉連接的開銷,但如果連接數(shù)多了,服務(wù)器端的資源壓力會比較大。

長輪詢(Long Polling):

  • 長輪詢是,客戶端發(fā)起請求到服務(wù)器,如果服務(wù)器端沒有數(shù)據(jù)更新,它不會立即響應(yīng),而是保持這個請求開放(保持一段時間的連接),直到有數(shù)據(jù)更新或者超時。
  • 當(dāng)有數(shù)據(jù)更新時,服務(wù)器響應(yīng)請求,發(fā)送更新給客戶端??蛻舳颂幚硗觏憫?yīng)后,會再次發(fā)起新的請求,重新開始長輪詢。
  • 長輪詢不是持續(xù)的網(wǎng)絡(luò)連接,每次輪詢完成后連接都會關(guān)閉,然后客戶端再發(fā)起新的請求。這導(dǎo)致在每個輪詢周期之間會有短暫的延遲。

基于以上對比,還可以看出長輪詢是有助于 Nacos 進(jìn)行健康檢測的,因為健康檢測就是隔一段時間發(fā)送心跳包。

??配置中心具體執(zhí)行流程如下:

1. 客戶端向 Nacos 服務(wù)器發(fā)送一個帶有監(jiān)聽器的長輪詢請求,以獲取某個特定配置的值。

2. Nacos 服務(wù)器收到這個長輪詢請求后,會檢查該配置是否發(fā)生了變化。如果沒有變化,則該請求將被阻塞,直到超時或者配置發(fā)生變化。(通常設(shè)置一個較長的超時時間,比如30秒)

3. 當(dāng)配置發(fā)生變化時,Nacos 服務(wù)器會立即響應(yīng),并將新的配置響應(yīng)給客戶端。

4. 客戶端接收到新的配置值之后,可以根據(jù)需要跟新自身的配置。

1.2? 注冊中心底層實現(xiàn)原理

Nacos 注冊中心的底層實現(xiàn)主要依賴于兩個關(guān)鍵的組件:服務(wù)注冊 + 服務(wù)發(fā)現(xiàn)。

對于服務(wù)注冊和服務(wù)發(fā)現(xiàn)的不是很理解的可以先去看看我的這篇文章:https://blog.csdn.net/xaiobit_hl/article/details/134142521

??Nacos 注冊中心的執(zhí)行流程如下

1. 服務(wù)注冊:

  • 當(dāng)服務(wù)啟動的時候,它會向Nacos服務(wù)器發(fā)送一個注冊請求,包含自己的元數(shù)據(jù)據(jù)信息
  • Nacos服務(wù)器接受到注冊請求后,會在內(nèi)存中維護(hù)一個注冊表,然后將服務(wù)提供者的信息(如服務(wù)名、IP、端口、健康狀態(tài)等)存儲到服務(wù)注冊表中,用于后續(xù)的服務(wù)發(fā)現(xiàn)。

2. 服務(wù)同步 (如果部署了多個Nacos實例):

  • Nacos集群中的服務(wù)同步機(jī)制確保所有的Nacos實例包含所有服務(wù)的最新信息。
  • 同步過程通常由Nacos集群內(nèi)部協(xié)調(diào)完成,確保每個實例的數(shù)據(jù)一致性

3. 心跳機(jī)制:

  • 服務(wù)實例會定期向Nacos服務(wù)器發(fā)送心跳來保持其注冊信息的活躍狀態(tài),表明自己的健康狀態(tài)和可用性。
  • 如果Nacos在配置的心跳時間內(nèi)沒有收到某服務(wù)實例的心跳,它將認(rèn)為該實例不可用,并可能將其從服務(wù)列表中剔除。

4.. 服務(wù)發(fā)現(xiàn):

  • 服務(wù)消費者在調(diào)用服務(wù)時,會向Nacos發(fā)送一個服務(wù)發(fā)現(xiàn)請求。
  • Nacos會返回一份可用服務(wù)實例的列表,客戶端基于這份列表通過負(fù)載均衡策略選擇一個實例進(jìn)行調(diào)用。

5. 負(fù)載均衡:

  • 在服務(wù)發(fā)現(xiàn)的過程中,Nacos還提供了負(fù)載均衡的支持,消費者可以選擇合適的負(fù)載均衡策略來選擇其中一個或多個實例進(jìn)行調(diào)用。
  • Nacos 里的負(fù)載均衡策略有兩種:權(quán)重 + CMDB。

2. Nacos 注冊中心的兩種調(diào)用方式

當(dāng) Nacos 注冊了 Restful 接口時,它 的調(diào)用方式主要有兩種:

  1. 使用 RestTemplate + Spring Cloud LoadBalancer
  2. 使用 OpenFeign + Spring Cloud LoadBalancer?

?2.1 RestTemplate?+ Spring Cloud LoadBalancer 的調(diào)用方式

實現(xiàn)步驟:

  1. 添加依賴:nacos + loadbalancer
  2. 設(shè)置配置信息
  3. 編寫調(diào)用代碼

①?添加依賴:nacos + loadbalancer

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

② 設(shè)置配置信息

spring:
  application:
    name: nacos-discovery-business
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        register-enabled: false # 設(shè)置消費者不要注冊到 Nacos

③?編寫調(diào)用代碼

此處又分為兩步實現(xiàn):

  1. 增加 RestTemplate 的 LoadBalanced 支持
  2. 使用 RestTemplate 調(diào)用接口

1. 增加 RestTemplate 的 LoadBalanced 支持

????????在Spring Boot啟動類上添加 @EnableDiscoveryClient 注解,然后使用 @LoadBalanced 注解替換 Ioc 容器中的 RestTemplate。

@SpringBootApplication
@EnableDiscoveryClient // 增加 RestTemplate 的 LoadBalanced 支持
public class ConsumerApplication {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

2.?使用 RestTemplate 調(diào)用接口

@RestController // 消費者
public class BusinessController2 {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/getnamebyid")
    public String getNameById(Integer id) {
        return restTemplate.getForObject("http://nacos-discovery-demo/
user/getnamebyid?id="+id,String.class);
    }
}

2.2 使用 OpenFeign + Spring Cloud LoadBalancer?

使用這種方式調(diào)用注冊中心,實現(xiàn)步驟分為以下 5 步:

  1. 添加框架支持 【nacos discovery、spring cloud LoadBalancer、spring cloud OpenFeign】
  2. 配置 Nacos 連接信息
  3. 開啟 OpenFeign 功能
  4. 聲明 OpenFeign 式的 Service 【生產(chǎn)者的的服務(wù)】
  5. 調(diào)用服務(wù)【調(diào)用生產(chǎn)者的服務(wù)】

具體的實現(xiàn)代碼可以參考我的上一篇博客:https://blog.csdn.net/xaiobit_hl/article/details/134142521?文章來源地址http://www.zghlxwxcb.cn/news/detail-742934.html

到了這里,關(guān)于Nacos 的底層實現(xiàn)原理 & 注冊中心的兩種調(diào)用方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包