一.基本概念
Consul是一套開源的分布式服務發現和配置管理系統,由HashiCorp公司用Go開發,
它提供微服務系統中的服務治理、配置中心、控制總線等功能,
服務發現:提供HTTP和DNS兩種發現方式,
健康檢測:支持多種方式,http、tcp、Docker、shell等
kv存盤:key、value存盤方式
多資料中心:Consul支持多資料中心,
可視化web界面,
二.安裝(使用Docker)
拉取鏡像:
docker pull consul
運行:
docker run --name consul -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 1 -ui -bind=0.0.0.0 -client=0.0.0.0
埠詳解
- 8500 : http 埠,用于 http 介面和 web UI訪問;
- 8300 : server rpc 埠,同一資料中心 consul server 之間通過該埠通信;
- 8301 : serf lan 埠,同一資料中心 consul client 通過該埠通信; 用于處理當前datacenter中LAN的gossip通信;
- 8302 : serf wan 埠,不同資料中心 consul server 通過該埠通信; agent Server使用,處理與其他datacenter的gossip通信;
- 8600 : dns 埠,用于已注冊的服務發現;
引數詳解:
–net=host docker引數, 使得docker容器越過了net namespace的隔離,免去手動指定埠映射的步驟 -server consul支持以server或client的模式運行, server是服務發現模塊的核心, client主要用于轉發請求 -advertise 將本機私有IP傳遞到consul -retry-join 指定要加入的consul節點地址,失敗后會重試, 可多次指定不同的地址 -client 指定consul系結在哪個client地址上,這個地址可提供HTTP、DNS、RPC等服務,默認是>127.0.0.1 -bind 系結服務器的ip地址;該地址用來在集群內部的通訊,集群內的所有節點到地址必須是可達的,>默認是0.0.0.0 allow_stale 設定為true則表明可從consul集群的任一server節點獲取dns資訊, false則表明每次請求都會>經過consul的server leader -bootstrap-expect 資料中心中預期的服務器數,指定后,Consul將等待指定數量的服務器可用,然后>啟動群集,允許自動選舉leader,但不能與傳統-bootstrap標志一起使用, 需要在server模式下運行, -data-dir 資料存放的位置,用于持久化保存集群狀態 -node 群集中此節點的名稱,這在群集中必須是唯一的,默認情況下是節點的主機名, -config-dir 指定組態檔,當這個目錄下有 .json 結尾的檔案就會被加載,詳細可參考https://www.consul.io/docs/agent/options.html#configuration_files -enable-script-checks 檢查服務是否處于活動狀態,類似開啟心跳 -datacenter 資料中心名稱 -ui 開啟ui界面 -join 指定ip, 加入到已有的集群中
這里有一個坑,如果是單機版consul,-bootstrap-expect選項要設定為1,大于等于2將導致web界面出現500錯誤,
訪問 192.168.10.137:8500,出現如下web界面,說明consul安裝成功,

三.服務注冊入駐Consul
部分pom依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
yml配置:
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
host: 192.168.10.137
port: 8500
discovery:
service-name: ${spring.application.name}
#心跳默認是關閉的,如果不開啟,consul檢查會認為該服務是unhealthy
heartbeat:
enabled: true
主啟動類:
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
運行,觀察consul的web界面,發現該服務已經被注冊到consul中了

三個注冊中心異同:

CAP C:強一致性 A:可用性 P:磁區容錯性


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/5041.html
標籤:Java
下一篇:JAVA 多執行緒
