在Spring Cloud Netflix中使用Eureak做爲註冊中心,可是Eureka2.0中止更新,Eureka1.0 進入了維護狀態。就像win7同樣,一樣能夠用,可是官方對於新出現的問題並不能及時修復,因此咱們就須要使用替代品。目前可用的註冊中心替代品主要有:Zookeeper、Consul、Nacos等,這裏主要講前兩個,Nacos是Spring Cloud Alilibaba中的組件,後期會說到。html
這一步非本文重點,請自行百度,很簡單的java
zookeeper-provider-8001
和zookeeper-consumer-80
zookeeper-provider-8001
這個提供者項目<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <exclusions> <exclusion> <!--爲何要排除這個依賴?--> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <!--而後又引入這個依賴?--> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> </dependency>
一個小細節,爲何要排除這個依賴,而後引入一個新的依賴?這波騷操做?spring
1. 主要是在zookeeper-discovery中的zookeeper版本是3.4.8 2. 而這個版本必定要和咱們在服務器安裝的zookeeper版本一致,否則你在註冊的時候,會報錯。固然,若是你在服務器原本安裝的是3.4.8就不用這麼麻煩了。
server: port: 8001 spring: application: # 這個應用的名稱,用來註冊在註冊中心的名稱 name: zookeeper-provider cloud: zookeeper: # 若是是zookeeper集羣,在這個地址後邊加上就能夠,用逗號分開 connect-string: 192.168.25.131:2181
@SpringBootApplication @EnableDiscoveryClient //注意這個註解是SpringCloud包中的 public class ApplicationDemo { public static void main(String[] args) { SpringApplication.run(ApplicationDemo.class, args); } }
pom.xml(和上邊同樣引入zookeeper依賴)shell
appliction.ymlapache
server: port: 80 spring: cloud: zookeeper: connect-string: 192.168.25.131:2181
@SpringBootApplication @EnableDiscoveryClient public class ApplicationDemo { public static void main(String[] args) { SpringApplication.run(ApplicationDemo.class, args); } }
@GetMapping("consumer/hello/{id}") public String hello(@PathVariable("id") String id){ //遠程調用provider中的接口 return restTemplate.getForObject("http://zookeeper-provider/provider/hello/"+id,String.class); }
http://localhost/consumer/hello/999
沒問題查看它的中文文檔windows
Consul是使用go語言開發,是一個服務網格(微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控)解決方案,它是一個一個分佈式的,高度可用的系統,並且開發使用都很簡便。它提供了一個功能齊全的控制平面,主要特色是:服務發現、健康檢查、鍵值存儲、安全服務通訊、多數據中心。瀏覽器
這個安裝要比Zookeeper簡單,我只說下windows安裝操做,其餘的查看官網https://www.consul.io/安全
若是你下載很慢的話,我在項目代碼中上傳了這個安裝包。看文未獲取代碼地址。服務器
consul agent -dev
Consul和Eureka是有圖形化界面的,啓動Consul後直接用瀏覽器打開localhost:8500
就能夠看到。微信
一樣,咱們複製兩個新項目consul-provider-8001 和 consul-consumer-80。
並且和Zookeeeper同樣,提供者和消費者都要註冊進去。只貼出修改的代碼,其餘的參見源代碼
<!--只是添加了這一個依賴,其餘的依賴不變,如消費者須要的ribbon等--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
server: port: 8001 spring: application: # 這個應用的名稱,用來註冊在註冊中心的名稱 name: consul-provider cloud: consul: host: localhost port: 8500 discovery: # 這個就是要註冊進consul中的服務名,直接使用了上邊定義的微服務名 service-name: ${spring.application.name}
@SpringBootApplication @EnableDiscoveryClient public class ApplicationDemo { public static void main(String[] args) { SpringApplication.run(ApplicationDemo.class, args); } }
@GetMapping("consumer/hello/{id}") public String hello(@PathVariable("id") String id){ //遠程調用provider中的接口 return restTemplate.getForObject("http://consul-provider/provider/hello/"+id,String.class); }
localhost:8500
看一下咱們的註冊中心是否有這兩個微服務。而後再次進行測試。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
http://localhost:8001/health
返回仍是down,也就是說咱們的健康檢查仍是不經過.。由於咱們使用的SpringBoot和Spring Cloud版本的問題。我還沒找到解決方案。可是咱們能夠關閉Consul對當前服務的健康檢查,添加以下配置:spring: application: # 這個應用的名稱,用來註冊在註冊中心的名稱 name: consul-consumer cloud: consul: host: localhost port: 8500 discovery: # 這個就是要註冊進consul中的服務名,直接使用了上邊定義的微服務名 service-name: ${spring.application.name} # 取消Consule對當前服務的健康檢查 register-health-check: false
最後,能在Consul控制檯看到這個
上邊這個錯誤標誌忽略就行了。而後咱們就可使用瀏覽器和以前同樣進行服務的訪問了
這兩個註冊中心在和Spring Cloud整合時,它們的理念和步驟是同樣的。
引依賴——》修改application.yml將這個微服務註冊進註冊中心——》在主啓動類中添加註解
後期在Spring Cloud Alilibaba中,咱們會使用Nacos(阿里自研的)做爲註冊中心
請關注微信公衆號,回覆「SpringCloud」獲取。