Consul服務(wù)注冊與發(fā)現(xiàn)
Consul官網(wǎng):https://www.consul.io/
Consul中文文檔:https://www.springcloud.cc/spring-cloud-consul.html
簡介
Consul是一種服務(wù)網(wǎng)格解決方案,提供具有服務(wù)發(fā)現(xiàn),配置和分段功能的全功能控制平面。這些功能中的每一個(gè)都可以根據(jù)需要單獨(dú)使用,也可以一起使用以構(gòu)建完整的服務(wù)網(wǎng)格。Consul需要一個(gè)數(shù)據(jù)平面,并支持代理和本機(jī)集成模型。Consul附帶了一個(gè)簡單的內(nèi)置代理,因此一切都可以直接使用,還支持Envoy等第三方代理集成。
Consul 是一套開源的分布式中的服務(wù)治理、配置中心、控制總線功能。這些功能中的每一個(gè)都可以根據(jù)需要單獨(dú)使用,也可以一起使用以構(gòu)建全方位的服務(wù)網(wǎng)格,總之 Consul 提供了一種完整的服務(wù)網(wǎng)格解決方案
它具有很多有點(diǎn)。包括:基于 raft 協(xié)議,比較簡潔;支持健康檢查,同時(shí)支持HTTP 和 DNS 協(xié)議,支持跨數(shù)據(jù)中心的WAN集群 提供圖形界面,跨平臺,支持 linux mac windows
主要特點(diǎn)
- 服務(wù)發(fā)現(xiàn):Consul 的客戶端可以注冊服務(wù),例如 api 或者 mysql ,其他客戶端可以使用 Consul 來發(fā)現(xiàn)給定服務(wù)的提供者。使用DNS 或者 HTTP ,應(yīng)用程序可以輕松找到他們依賴的服務(wù)
- 健康檢查:領(lǐng)事客戶端可以提供任意數(shù)量的運(yùn)行狀況檢查,這些檢查可以與給定服務(wù)(“ Web服務(wù)器是否返回200 OK”)或本地節(jié)點(diǎn)(“內(nèi)存利用率低于90%”)相關(guān)。操作員可以使用此信息來監(jiān)視群集的運(yùn)行狀況,服務(wù)發(fā)現(xiàn)組件可以使用此信息將流量從不正常的主機(jī)發(fā)送出去。
- KV存儲:應(yīng)用程序可以將Consul的分層鍵/值存儲用于多種目的,包括動(dòng)態(tài)配置,功能標(biāo)記,協(xié)調(diào),領(lǐng)導(dǎo)者選舉等。簡單的HTTP API使其易于使用。
- 安全的服務(wù)通信:領(lǐng)事可以為服務(wù)生成并分發(fā)TLS證書,以簡歷相互TLS連接。意圖 可用于定義允許那些服務(wù)進(jìn)行通信,可以使用可以實(shí)時(shí)更改的意圖輕松管理服務(wù)分段,而不必使用復(fù)雜的網(wǎng)絡(luò)拓?fù)浜挽o態(tài)防火墻規(guī)則。
- 多數(shù)據(jù)中心:Consul開箱即用地支持多個(gè)數(shù)據(jù)中心。這意味著Consul的用戶不必?fù)?dān)心會構(gòu)建其他抽象層以擴(kuò)展到多個(gè)區(qū)域。
在docker上安裝啟動(dòng)consul
#拉取consul鏡像
docker pull consul
#啟動(dòng)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代表服務(wù)器ip地址)
在這里插入圖片描述
服務(wù)提供者
- pom文件
<!--SpringCloud consul-server-->
<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: 10.211.55.17 #用linux的ip地址(consul在本機(jī)就填localhost)
port: 8500
discovery:
service-name: ${spring.application.name}
- springboot 啟動(dòng)類增加注解
@EnableDiscoveryClient //該注解用于向使用consul或者Zookeeper作為注冊中心時(shí)注冊服務(wù)
- 編寫測試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();
}
}
- 啟動(dòng)項(xiàng)目
在這里插入圖片描述
服務(wù)消費(fèi)者
和消費(fèi)者相同除了端口
- 控制層 RestTemplate 遠(yuǎn)程調(diào)用
@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;
}
}
啟動(dòng)
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
- 個(gè)人博客: http://blog.yanxiaolong.cn/.