Eureka停更了?試試Zookpper和Consul

在Spring Cloud Netflix中使用Eureak做爲註冊中心,可是Eureka2.0中止更新,Eureka1.0 進入了維護狀態。就像win7同樣,一樣能夠用,可是官方對於新出現的問題並不能及時修復,因此咱們就須要使用替代品。目前可用的註冊中心替代品主要有:Zookeeper、Consul、Nacos等,這裏主要講前兩個,Nacos是Spring Cloud Alilibaba中的組件,後期會說到。html

使用Zookeeper做爲註冊中心

1、安裝Zookeeper並啓動服務

​ 這一步非本文重點,請自行百度,很簡單的java

2、將原有的微服務註冊進Zookeeper

  • 使用過Dubbo的小夥伴對Zookeeper必定不陌生。使用Eureka時,咱們是建立一個新的SpringBoot Web項目(若是是Eureka集羣的話,就要建立多個項目),而後將其餘微服務註冊進去,而Zookeeper卻不用新建項目,只須要經過修改配置和簡單的編碼就能夠進行註冊
  • 爲了和以前的項目衝突,咱們先將以前的項目複製兩個新的項目zookeeper-provider-8001zookeeper-consumer-80
先修改zookeeper-provider-8001這個提供者項目
  • 在pom.xml中引入依賴
<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就不用這麼麻煩了。
  • 在application.yml中配置上zookeeper的地址
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);
    }
}
  • 啓動這個項目,而後在服務器中查看下zookeeper的節點

使用Zookeeper做爲Spring Cloud註冊中心

一樣的方法,修改消費者項目zookeeper-consumer-80
  • pom.xml(和上邊同樣引入zookeeper依賴)shell

  • appliction.ymlapache

server:
  port: 80
spring:
  cloud:
    zookeeper:
      connect-string: 192.168.25.131:2181
  • 和Eureka不一樣的是,咱們同時也要將消費者註冊進Zookeeper中
@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationDemo {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationDemo.class, args);
    }
}
  • 咱們使用的是Ribbon用服務名進行訪問的方式,因此還要修改它的controller類
@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沒問題

使用Consul做爲註冊中心

查看它的中文文檔windows

Consul是使用go語言開發,是一個服務網格(微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控)解決方案,它是一個一個分佈式的,高度可用的系統,並且開發使用都很簡便。它提供了一個功能齊全的控制平面,主要特色是:服務發現、健康檢查、鍵值存儲、安全服務通訊、多數據中心。瀏覽器

1、安裝Consul

這個安裝要比Zookeeper簡單,我只說下windows安裝操做,其餘的查看官網https://www.consul.io/安全

​ 若是你下載很慢的話,我在項目代碼中上傳了這個安裝包。看文未獲取代碼地址。服務器

  • 在官網上下載安裝包,windows的下載解壓後就是一個.exe文件。使用cmd打開當前目錄(在當前目錄下按住Shift+鼠標右鍵,選擇Open commond window here 或者在地址欄中輸入cmd而後回車)而後運行以下命令:
consul agent -dev
  • Consul和Eureka是有圖形化界面的,啓動Consul後直接用瀏覽器打開localhost:8500就能夠看到。微信

    使用Consul做爲註冊中心

2、將原有微服務註冊進Consul

​ 一樣,咱們複製兩個新項目consul-provider-8001 和 consul-consumer-80。

​ 並且和Zookeeeper同樣,提供者和消費者都要註冊進去。只貼出修改的代碼,其餘的參見源代碼

  • pom.xml
<!--只是添加了這一個依賴,其餘的依賴不變,如消費者須要的ribbon等-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
  • application.yml(提供者和服務者除了端口號和application.name外,其餘的不變)
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);
    }
}
  • 注意修改Controller中的遠程調用服務名
@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看一下咱們的註冊中心是否有這兩個微服務。而後再次進行測試。
  • 可是咱們啓動後,在Consul後臺發現咱們服務是註冊進去了,可是報錯了。這是由於Consul和其餘的註冊中心不同,它要檢查這個SpringBoot的健康值,就是要訪問每一個服務的"/health"接口。因此咱們要在每個微服務中引入SpringBoot的健康檢查的依賴(以前用過這個的小夥伴就很熟悉了)
<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控制檯看到這個

使用Consul做爲註冊中心

上邊這個錯誤標誌忽略就行了。而後咱們就可使用瀏覽器和以前同樣進行服務的訪問了

總結:

  1. 這兩個註冊中心在和Spring Cloud整合時,它們的理念和步驟是同樣的。

    引依賴——》修改application.yml將這個微服務註冊進註冊中心——》在主啓動類中添加註解

  2. 和Eureka不一樣就是,在註冊中心能同時看到提供者和消費者
  3. 後期在Spring Cloud Alilibaba中,咱們會使用Nacos(阿里自研的)做爲註冊中心

項目代碼及更多學習教程

請關注微信公衆號,回覆「SpringCloud」獲取。

相關文章
相關標籤/搜索