開發與維運

Consul服務註冊與發現

Consul服務註冊與發現

-- --

Consul官網:https://www.consul.io/
Consul中文文檔:https://www.springcloud.cc/spring-cloud-consul.html

簡介

Consul是一種服務網格解決方案,提供具有服務發現,配置和分段功能的全功能控制平面。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以構建完整的服務網格。Consul需要一個數據平面,並支持代理和本機集成模型。Consul附帶了一個簡單的內置代理,因此一切都可以直接使用,還支持Envoy等第三方代理集成。

Consul 是一套開源的分佈式中的服務治理、配置中心、控制總線功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以構建全方位的服務網格,總之 Consul 提供了一種完整的服務網格解決方案


它具有很多有點。包括:基於 raft 協議,比較簡潔;支持健康檢查,同時支持HTTP 和 DNS 協議,支持跨數據中心的WAN集群 提供圖形界面,跨平臺,支持 linux mac windows

主要特點

  • 服務發現:Consul 的客戶端可以註冊服務,例如 api 或者 mysql ,其他客戶端可以使用 Consul 來發現給定服務的提供者。使用DNS 或者 HTTP ,應用程序可以輕鬆找到他們依賴的服務
  • 健康檢查:領事客戶端可以提供任意數量的運行狀況檢查,這些檢查可以與給定服務(“ Web服務器是否返回200 OK”)或本地節點(“內存利用率低於90%”)相關。操作員可以使用此信息來監視群集的運行狀況,服務發現組件可以使用此信息將流量從不正常的主機發送出去。
  • KV存儲:應用程序可以將Consul的分層鍵/值存儲用於多種目的,包括動態配置,功能標記,協調,領導者選舉等。簡單的HTTP API使其易於使用。
  • 安全的服務通信:領事可以為服務生成並分發TLS證書,以簡歷相互TLS連接。意圖 可用於定義允許那些服務進行通信,可以使用可以實時更改的意圖輕鬆管理服務分段,而不必使用複雜的網絡拓撲和靜態防火牆規則。
  • 多數據中心:Consul開箱即用地支持多個數據中心。這意味著Consul的用戶不必擔心會構建其他抽象層以擴展到多個區域。
在docker上安裝啟動consul
#拉取consul鏡像
docker pull consul

#啟動consul
docker run -d  -p 8500:8500/tcp --name myConsul  consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0

訪問 : http://http:// xx.xx.xx.xx/:8500 (linux的IP地址加上冒號8500, xx代表服務器ip地址)

在這裡插入圖片描述

服務提供者
  1. pom文件
       <!--SpringCloud consul-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
  1. yml文件
server:
  port: 8006


spring:
  application:
    name: consul-provider-payment
  cloud:
    consul:
      host: 10.211.55.17  #用linux的ip地址(consul在本機就填localhost)
      port: 8500
      discovery:
        service-name: ${spring.application.name}
  1. springboot 啟動類增加註解
@EnableDiscoveryClient    //該註解用於向使用consul或者Zookeeper作為註冊中心時註冊服務
  1. 編寫測試Controller
@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")        //獲取端口號
    private String serverPort;

    @RequestMapping("/payment/consul")
    public String paymentConsul(){
        return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString();
    }

}
  1. 啟動項目

在這裡插入圖片描述

服務消費者

和消費者相同除了端口

  • 控制層 RestTemplate 遠程調用
@RestController
@Slf4j
public class OrderConsulController {

    public static final String INVOKE_URL = "http://consul-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/payment/consul")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
        return result;
    }

}

啟動

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Leave a Reply

Your email address will not be published. Required fields are marked *