天天看點

微服務架構 | 3.4 HashiCorp Consul 注冊中心

目錄

  • 前言
  • 1. Consul 基礎知識
    • 1.1 Consul 是什麼
    • 1.2 Consul 的特點
  • 2. 安裝并運作 Consul 伺服器
    • 2.1 下載下傳 Consul
    • 2.2 運作 Consul 伺服器
  • 3. 使用 Consul 管理服務提供者
    • 3.1 引入 pom.xml 依賴
    • 3.2 修改 boostrap.yml 配置檔案
    • 3.3 在主啟動類上添加注解
    • 3.4 編寫業務類,并在 controller 層開放接口
  • 4. 使用 Consul 管理服務消費者
    • 4.1 引入 pom.xml 依賴
    • 4.2 修改 boostrap.yml 配置檔案
    • 4.3 在主啟動類上添加注解
    • 4.4 編寫業務類
  • 最後

參考資料:

《Spring Microservices in Action》

《Spring Cloud Alibaba 微服務原理與實戰》

《B站 尚矽谷 SpringCloud 架構開發教程 周陽》

《Consul 官網》

Consul 是一套開源的分布式服務發現和配置管理系統,由 HashiCorp 公司用 Go 語言開發。它提供了微服務系統中的服務治理、配置中心、控制總線等功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以建構全方位的服務網格,總之 Consul 提供了一種完整的服務網格解決方案;

  • Consul 是一套開源的分布式服務發現和配置管理系統,由 HashiCorp 公司用 Go 語言開發;
  • 提供了微服務系統中的服務治理、配置中心、控制總線等功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以建構全方位的服務網格,總之 Consul 提供了一種完整的服務網格解決方案;
  • 它具有很多優點。包括:基于 raft 協定,比較簡潔; 支援健康檢查,同時支援 HTTP 和 DNS 協定支援跨資料中心的 WAN 叢集提供圖形界面;跨平台,支援 Linux、Mac、Windows

  • 服務發現:提供 HTTP 和 DNS 兩種發現方式;
  • 健康監測:支援多種方式:HTTP、TCP、Docker、Shell 腳本定制化監控;
  • KV 存儲:Key、Value的存儲方式;
  • 多資料中心:支援多資料中心;
  • 可視化 Web 界面;

基于 Win10 下的 Consul 伺服器安裝;

  • 通路連接配接:https://www.consul.io/downloads;
    微服務架構 | 3.4 HashiCorp Consul 注冊中心
  • 下載下傳解壓後:
微服務架構 | 3.4 HashiCorp Consul 注冊中心

  • 在 consul.exe 程式所在目錄下打開 cmd 指令視窗;
  • 鍵入指令

    consul

    ,顯示下面說明安裝成功;
微服務架構 | 3.4 HashiCorp Consul 注冊中心
  • 此時鍵入指令

    consul agent -dev

    使用開發模式啟動;
微服務架構 | 3.4 HashiCorp Consul 注冊中心
  • 通路連接配接可以進入 Consul 首頁:http://localhost:8500;
微服務架構 | 3.4 HashiCorp Consul 注冊中心

使用 Consul 建構服務提供者大緻與 Nacos 和 Zookeeper 相同;Nacos 與 Zookeeper 的建構方式詳情請見《3.2 Alibaba Nacos 注冊中心》與《3.3 Apache Zookeeper 注冊中心》;

<!--SpringCloud consul-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
           

# consul 服務提供者端口
server:
  port: 8006
spring:
  application:
    name: consul-provider
# consul 注冊中心位址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}
           

  • @EnableDiscoveryClient:使用其他元件(Nacos、zookeeper、Consul)作為注冊中心;

這裡編寫一個簡單接口僅作為示例;
@RestController
public class providerController{
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping(value = "/provider/consul")
    public String providerConsul(){
        return "springcloud with consul: "+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}
           

使用 Consul 建構服務消費者大緻與 Nacos 和 Zookeeper 相同;Nacos 與 Zookeeper 的建構方式詳情請見《3.2 Alibaba Nacos 注冊中心》與《3.3 Apache Zookeeper 注冊中心》;

  • 同提供者;
<!--SpringCloud consul-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
           

  • 基本上同提供者;
# consul 服務消費者端口号
server:
  port: 80
spring:
  application:
    name: consul-consumer
# consul 注冊中心位址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}
           

  • 由于我們使用 Ribbon + RestTemplate 的負載均衡政策,是以需要在 IoC 容器中添加一個 RestTemplate JavaBean;
  • 詳情請見《4.1 基于 Ribbon 的負載均衡詳解》;
  • 該 Bean 可以在主啟動類中添加;也可以在主啟動類所在包或子包的 config 包中添加,如下:
@Configuration
public class ApplicationContextBean{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
           
  • 我們在 controller 層開放接口給用戶端,并在該接口裡調用提供者的 API;
@RestController
public class ComsumerConsulController{
    public static final String INVOKE_URL = "http://consul-provider";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/consul")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL+"/provider/consul", String.class);
        System.out.println("消費者調用提供者擷取服務--->result:" + result);
        return result;
    }
}
           

新人制作,如有錯誤,歡迎指出,感激不盡!

歡迎關注公衆号,會分享一些更日常的東西!

如需轉載,請标注出處!

微服務架構 | 3.4 HashiCorp Consul 注冊中心