Spring Cloud Consul項目是針對Consul的服務治理實現(xiàn)。Consul是一個分布式高可用的系統(tǒng),它包含多個組件,但是作為一個整體,在微服務架構中為我們的基礎設施提供服務發(fā)現(xiàn)和服務配置的工具。它包含了下面幾個特性: - 服務發(fā)現(xiàn)
- 健康檢查
- Key/Value存儲
- 多數(shù)據(jù)中心
由于Spring Cloud Consul項目的實現(xiàn),我們可以輕松的將基于Spring Boot的微服務應用注冊到Consul上,并通過此實現(xiàn)微服務架構中的服務治理。 以之前實現(xiàn)的基于Eureka的示例(eureka-client)為基礎,我們?nèi)绾螌⒅皩崿F(xiàn)的服務提供者注冊到Consul上呢?方法非常簡單,我們只需要在pom.xml中將eureka的依賴修改為如下依賴: 1
2
3
4
| <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
|
接下來再修改一下application.properites,將consul需要的配置信息加入即可,比如:(下面配置是默認值) 1
2
| spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
|
到此為止,我們將eureka-client轉(zhuǎn)換為基于consul服務治理的服務提供者就完成了。前文我們已經(jīng)有提到過服務發(fā)現(xiàn)的接口DiscoveryClient是Spring Cloud對服務治理做的一層抽象,所以可以屏蔽Eureka和Consul服務治理的實現(xiàn)細節(jié),我們的程序不需要做任何改變,只需要引入不同的服務治理依賴,并配置相關的配置屬性就能輕松的將微服務納入Spring Cloud的各個服務治理框架中。 下面可以嘗試讓consul的服務提供者運行起來。這里可能讀者會問,不需要創(chuàng)建類似eureka-server的服務端嗎?由于Consul自身提供了服務端,所以我們不需要像之前實現(xiàn)Eureka的時候創(chuàng)建服務注冊中心,直接通過下載consul的服務端程序就可以使用。 我們可以用下面的命令啟動consul的開發(fā)模式: - $consul agent -dev
- ==> Starting Consul agent...
- ==> Starting Consul agent RPC...
- ==> Consul agent running!
- Version: 'v0.7.2'
- Node name: 'Lenovo-zhaiyc'
- Datacenter: 'dc1'
- Server: true (bootstrap: false)
- Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
- Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
- Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false
- Atlas: <disabled>
- ==> Log data will now stream in as it occurs:
- 2017/06/22 07:50:54 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:127.0.0.1:8300 Address:127.0.0.1:8300}]
- 2017/06/22 07:50:54 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
- 2017/06/22 07:50:54 [INFO] serf: EventMemberJoin: Lenovo-zhaiyc 127.0.0.1
- 2017/06/22 07:50:54 [INFO] consul: Adding LAN server Lenovo-zhaiyc (Addr: tcp/127.0.0.1:8300) (DC: dc1)
- 2017/06/22 07:50:54 [INFO] serf: EventMemberJoin: Lenovo-zhaiyc.dc1 127.0.0.1
- 2017/06/22 07:50:54 [INFO] consul: Adding WAN server Lenovo-zhaiyc.dc1 (Addr: tcp/127.0.0.1:8300) (DC: dc1)
- 2017/06/22 07:51:01 [ERR] agent: failed to sync remote state: No cluster leader
- 2017/06/22 07:51:02 [WARN] raft: Heartbeat timeout from "" reached, starting election
- 2017/06/22 07:51:02 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
- 2017/06/22 07:51:02 [DEBUG] raft: Votes needed: 1
- 2017/06/22 07:51:02 [DEBUG] raft: Vote granted from 127.0.0.1:8300 in term 2. Tally: 1
- 2017/06/22 07:51:02 [INFO] raft: Election won. Tally: 1
- 2017/06/22 07:51:02 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
- 2017/06/22 07:51:02 [INFO] consul: cluster leadership acquired
- 2017/06/22 07:51:02 [INFO] consul: New leader elected: Lenovo-zhaiyc
- 2017/06/22 07:51:02 [DEBUG] consul: reset tombstone GC to index 3
- 2017/06/22 07:51:02 [INFO] consul: member 'Lenovo-zhaiyc' joined, marking health alive
- 2017/06/22 07:51:02 [INFO] agent: Synced service 'consul'
- 2017/06/22 07:51:02 [DEBUG] agent: Node info in sync
復制代碼consul服務端啟動完成之后,我們再將之前改造后的consul服務提供者啟動起來。consul與eureka一樣,都提供了簡單的ui界面來查看服務的注冊情況: 從現(xiàn)在開始,我這邊會將近期研發(fā)的springcloud微服務云架構的搭建過程和精髓記錄下來,幫助更多有興趣研發(fā)spring cloud框架的朋友,希望可以幫助更多的好學者。大家來一起探討spring cloud架構的搭建過程及如何運用于企業(yè)項目。
|