spring cloud consul 使用以及和eureka的區別

現在在做供應鏈項目,項目還是一套微服務架構體系。註冊中心從之前用的eureka換到了consul。架構的理由估計是eureka不更新了吧。所以來學習一下consul的內容。

最近比較忙,我也不再單獨查資料了,就把自己知道的寫出來好了。如有錯誤請指正哈。

什麼是consul

consul是一個spring cloud 中集成好的開源的分佈式的服務註冊發現中心。由Go語言編寫。支持健康檢查,多數據中心還支持k-v存儲,採用RAFT一致性算法,保證強一致性,可用性。並且和docker完美兼容。

 

consul和eureka區別

Eureka優點是註冊速度很快,不管同步到其他節點時是否有問題,只要服務註冊到主節點既代表註冊成功。犧牲了一致性,但是保證了高可用性和最終一致性。即使當前節點因爲一些問題沒有註冊成功,那麼也會通過其他節點找到當前服務,返回元數據。
和eureka相比,consul註冊就稍慢一些了。上面提到了,consul是強一致性的,所以consul註冊服務是先註冊,然後同步到各節點,raft算法使consul在有一半以上的節點註冊成功時才證明服務註冊成功。這樣保證了數據的一致性。但也因爲這樣,導致註冊服務相對較慢,並且當主節點掛掉之後,重新選舉時整個consul不可用。可以說是犧牲了一部分可用性換來的一致性。

那麼如何選擇呢?

還是看需求吧,目前eureka已經不再更新,不過功能已經夠用。我覺得還是要看是要保證一致性還是可用性了。

 

consul使用

收線下載consul。地址:https://www.consul.io/downloads.html

然後我們使用一個bat啓動一下consul。

@echo off
consul agent -dev -client 127.0.0.1 -ui
pause

這裏使用consul給我們提供的dev模式,指定本機IP。

啓動後訪問:http://localhost:8500/ui/dc1/services

會看到這個頁面:

這裏我們的consul已經啓動完成了。和eureka不同的是他不用使用idea啓動,直接下載即可。

 

然後我們需要一個生產者和一個消費者,其實consul也是支持ribbon的。所以我們這裏模擬2個生產者。一個消費者。看消費者會不會負載均衡的調用生產者。

這裏就簡單寫了。回頭會把源碼上傳一份。

spring boot版本2.1.5.release spring cloud 版本Greenwich.SR1.

配置一下要註冊到consul的生產者依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

這裏注意兩點,一個是版本號要對應,spring boot 2.1.x以上版本要使用Greenwich版本的spring cloud 不然無法兼容。

第二個是註冊consul要有兩個依賴,之前看了一個資料寫只需要spring-cloud-starter-consul-discovery。其實是不行的。

然後是yml:

server:
  port: 8082
spring:
  application:
    name: consul-producer
  cloud:
    consul:
      host: 127.0.0.1 #consul的IP
      port: 8500 #consul啓動端口默認8500
      discovery:
        healthCheckPath: /actuator/health  #健康檢查路徑
        healthCheckInterval: 15s #健康檢查頻率
        hostname: 127.0.0.1 #註冊服務所在IP
        port: ${server.port}  #註冊服務所在端口
        service-name: ${spring.application.name} #註冊服務名
        register: true #是否啓動註冊
        register-health-check: true #是否啓動健康檢查

後面還是啓動類添加註解:

@EnableDiscoveryClient

生產者和消費者都需要這麼配置。

具體的測試代碼我就不放出來了。服務間調用還是使用的openfeign做的。

我把內容放在下載裏面。大家下載下來看一下就知道了。

測試時,需要注意的是,先打開IDEA的多端口啓動,然後8081啓動一個producer,8082啓動一個producer。

重複請求consumer。會發現每次調用的producer是不一樣的。而且控制檯會打印出ribbon的日誌。所以consul也是支持負載均衡的輪詢方式的負載均衡的。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章