consul 作為服務註冊與發現和配置中心

CyrusHuang發表於2024-09-05

下載安裝

  1. 下載地址:https://developer.hashicorp.com/consul/install?product_intent=consul

    consul 作為服務註冊與發現和配置中心
  2. 解壓出來只有個 exe 檔案,在這個目錄開啟 shell,consul --version 檢視版本,consul agent -dev 開發模式啟動

    consul 作為服務註冊與發現和配置中心

    啟動後訪問 localhost:8500 能正常訪問到 consul 介面

    consul 作為服務註冊與發現和配置中心

小試牛刀

  1. 工程匯入依賴

    <!--SpringCloud consul config 讀取配置需要 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    
    <!--SpringCloud consul discovery 註冊服務需要 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 啟動類使用註解

    @EnableDiscoveryClient // 當前工程註冊到 consul
    @SpringBootApplication
    public class SpringbootApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootApplication.class,args);
        }
    }
    
  3. 配置檔案,這裡需要兩個配置檔案,一個常規的 application.xml,裡面放 springboot 的配置,比如資料來源、mapper、mvc 等,consul 作為配置中心需要 bootstrap.yml。application.yml 就不貼了,貼一下 bootstrap.yml

    spring:
      application:
        name: my-consul-test-service
        # consul 的配置放這裡
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            service-name: ${spring.application.name}
          config:
            profile-separator: '-' # 工程和環境profile連線符是英文逗號‘,’太反人類了,至少國內沒有這樣的,這裡改成短橫線
            format: YAML
    
  4. 啟動服務,consul 能看到 my-consul-test-service

    consul 作為服務註冊與發現和配置中心
  5. 到 consul 新增一個配置,看是否能讀取到

    1. consul 的配置很特殊,總體格式為 config/服務,[環境]/data,分為三層: config、服務、data

    2. 比如 my-consul-test-service 服務,如果有兩個環境一個是 dev,一個是 prod,就要這樣建立 /config/my-consul-test-service,dev/data/config/my-consul-test-service,prod/data。服務與環境之間是逗號,我們在 pom 裡面改成了 -

    3. 建立 data

      consul 作為服務註冊與發現和配置中心
  6. data 裡就是真正的配置資料,隨便寫一個

    consul 作為服務註冊與發現和配置中心
  7. 工程中寫個 controller,讀取配置檔案

    @RefreshScope // 動態重新整理(預設55秒重新整理一次,如果想實時,可以修改預設重新整理時間)
    @GetMapping(value = "/testGetConfig")
    public String testGetConfig( @Value("${test.username}") String username){
        return username;
    }
    
  8. 訪問介面測試

    consul 作為服務註冊與發現和配置中心
  9. 每次重啟配置檔案都會丟失,要把配置檔案持久化下來才行,增加個配置就行。這玩意應該不是主流吧,感覺還是 nacos 是主流,服務註冊不上去都還能跟原始碼,這個玩意不是java語言寫的,好像是 go 嗎?出問題看不了原始碼

相關文章