天天看點

SpringCloud學習[4]-服務發現consul

定義

  • 官網:https://www.consul.io/
  • consul是一個可以提供服務發現,健康檢查,多資料中心,Key/Value存儲等功能的分布式服務架構,用于實作分布式系統的服務發現與配置。與其他分布式服務注冊與發現的方案類似,使用起來也較為簡單。consul用Golang實作,是以具有天然的可移植性(支援Linux、Windows、MacOS);安裝包僅包含一個可執行檔案,友善部署。

Consul是HashiCorp公司推出的開源工具,用于實作分布式系統的服務發現與配置。 Consul是分布式的、高可用的、可橫向擴充的。

它具備以下特性:

  • service discovery:consul通過DNS或者HTTP接口使服務注冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣注冊。
  • health checking:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的內建,可以防止服務轉發到故障的服務上面。
  • key/value storage:一個用來存儲動态配置的系統。提供簡單的HTTP接口,可以在任何地方操作。
  • multi-datacenter:無需複雜的配置,即可支援任意數量的區域。# 為什麼要使用consul服務發現

為什麼要使用consul

一套微服務架構中有很多個服務需要管理,如果一一對應的進行管理會很繁瑣,是以需要有一個管理發現的機制。

安裝consul(centos7)

1. 下載下傳consul
  • https://www.consul.io/downloads
    SpringCloud學習[4]-服務發現consul
2. 在指定目錄下解壓縮
  • 建立consul檔案目錄

    mkdir -p /home/consul

  • 解壓zip檔案

    unzip consul_xxx_xxx.zip

    yum install unzip (如果提示unzip not found)

    SpringCloud學習[4]-服務發現consul
  • 給解壓後的consul檔案賦予可執行權限

    chmod -R 755 ./consul

  • 移動consul檔案至/usr/bin/目錄下

    mv consul /usr/bin/consul

  • 檢測是否安裝成功

    consul --version

    SpringCloud學習[4]-服務發現consul
3. 啟動consul

consul agent -dev -ui -node=consul-dev -client=192.168.0.133

說明:

-client 為伺服器端IP,如果不配置該參數會導緻同網段機器通路不到。也可以使用指令consul agent -dev -ui -node=consul-dev -client=0.0.0.0

-node 指定叢集節點名稱,預設為伺服器名稱

4. 通路consul管理界面(預設端口8500)

http://192.168.0.133:8500/

SpringCloud學習[4]-服務發現consul

管理頁面基本介紹

  • dc1:資料中心名稱datacenter,預設dc1。指定資料中心啟動 consul agent datacenter=dcname
  • services:目前consul服務中注冊的服務清單。預設client和server同時啟動,自己注冊自己,會出現一個consul服務。
  • nodes:用來檢視consul的叢集節點

開發consul client

1. 建立springboot項目
2. 引入依賴
<!--引入consul依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spirng-cloud-starter-consul-discovery</artifactId>
        </dependency>
           
3. 寫配置application.properties
# 向consul server 服務注冊位址
spring.cloud.consul.host=192.168.0.133
spring.cloud.consul.port=8500

# 指定注冊服務的服務名稱,預設${spring.application.name}
spring.cloud.consul.discovery.service-name=${spring.application.name}
           
4. 在入口類加入注解

@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class ShopApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShopApplication.class, args);
    }
}
           
5. 啟動測試
SpringCloud學習[4]-服務發現consul
6. web管理界面
SpringCloud學習[4]-服務發現consul

此時提示‘SHOP’服務不可用

原因:consul server 檢測所有用戶端心跳,但是發送時client必須給予響應該服務才能正常使用,在現在用戶端(shop)中并沒有引入健康檢查依賴,是以導緻server健康檢查後始終未有回應,導緻服務不可用。

解決:

-1. 關閉健康檢查 (不推薦關閉健康檢查)

# 關閉健康檢查

spring.cloud.consul.discovery.register-health-check=false

-2. 引入健康檢查依賴
7. consul開啟健康檢查
  • 預設情況下,consul健康檢查是開啟的,但是必須依賴健康檢查依賴才能正确監控健康狀态是以直接啟動會顯示錯誤,引入健康監控依賴之後服務正常。
<!--健康檢查依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
           

再次啟動測試

SpringCloud學習[4]-服務發現consul

還是服務不可用…此處應該是我個人情況

解決:https://blog.csdn.net/qq_31832209/article/details/118111302

繼續閱讀