參考博客:https://blog.csdn.net/z694644032/article/details/96485619,https://www.cnblogs.com/zhucww/p/11532770.html
當client向server注冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。Eureka server 從每個client實例接收心跳消息。 如果心跳超時,則通常將該實例從注冊server中刪除
服務注冊與發現的組件在市面上有非常多的選擇,常用的有Eureka、Nacos、Consul
1.Eureka 是 Netflix 開源的一款提供服務注冊和發現的產品,已閉源,提供了完整的服務注冊和發現,springcloud中最核心的組件之一,需要手動配置 Eureka Server 服務器。
服務器端:pom.xml 中引入spring-cloud-starter-netflix-eureka-server,啟動類添加@EnableDiscoveryClient
或@EnableEurekaServer
注解,配置文件添加相關配置;
客戶端:pom.xml 中引入spring-cloud-starter-netflix-eureka-client,啟動類添加@EnableEurekaClient
注解,配置文件添加相關配置;
2.Nacos 是 Alibaba 開源的一款專注於動態服務發現,配置和服務管理的組件
服務器端:使用 Nacos 作為服務注冊中心;
客戶端:pom.xml 中引入spring-cloud-starter-alibaba-nacos-discovery,啟動類添加 @EnableDiscoveryClient
注解,配置文件添加相關配置;
3.Consul是一個分布式高可用的系統,是為基礎設施提供服務發現和服務配置的工具
服務器端:使用 consul 服務器;
客戶端:pom.xml 中引入spring-cloud-starter-consul-discovery,啟動類添加 @EnableDiscoveryClient
注解,配置文件添加相關配置;
注意點:
1.@
EnableEurekaClient只適用於Eureka作為注冊中心,@EnableDiscoveryClient
可以是其他注冊中心;
2.從Spring Cloud Edgware開始,@EnableDiscoveryClient
或@EnableEurekaClient
可省略。只需加上相關依賴,並進行相應配置,即可將微服務注冊到服務發現組件上;
Eureka、Nacos、Consul 技術選型對比:
配置中心:
1.eureka 不支持
2.consul 支持 但用起來偏麻煩,不太符合springBoot框架的命名風格,支持動態刷新
3.nacos 支持 用起來簡單,符合springBoot的命名風格,支持動態刷新
注冊中心:
-
eureka
- 依賴:依賴ZooKeeper
- 應用內/外:直接集成到應用中,依賴於應用自身完成服務的注冊與發現,
- ACP原則:遵循AP(可用性+分離容忍)原則,有較強的可用性,服務注冊快,但犧牲了一定的一致性。
- 版本迭代:目前已經不進行升級
- 集成支持:只支持SpringCloud集成
- 訪問協議:HTTP
- 雪崩保護:支持雪崩保護
- 界面:英文界面,不符合國人習慣
- 上手:容易
-
consul
-
依賴:不依賴其他組件
-
應用內/外:屬於外部應用,侵入性小
-
ACP原則:遵循CP原則(一致性+分離容忍) 服務注冊稍慢,由於其一致性導致了在Leader掛掉時重新選舉期間真個consul不可用。
-
版本迭代:目前仍然進行版本迭代
-
集成支持:支持SpringCloud K8S集成
-
訪問協議:HTTP/DNS
-
雪崩保護:不支持雪崩保護
-
界面:英文界面,不符合國人習慣
-
上手:復雜一點
-
-
nacos
- 依賴:不依賴其他組件
- 應用內/外:屬於外部應用,侵入性小
- ACP原則:通知遵循CP原則(一致性+分離容忍) 和AP原則(可用性+分離容忍)
- 版本迭代:目前仍然進行版本迭代
- 集成支持:支持Dubbo 、SpringCloud、K8S集成
- 訪問協議:HTTP/動態DNS/UDP
- 雪崩保護:支持雪崩保護
- 界面:中文界面,符合國人習慣
- 上手:極易,中文文檔,案例,社區活躍