摘要:在我們的文檔中,我們使用來表明就選舉和事務(wù)的順序達(dá)成一致。提供成員關(guān)系,故障檢測(cè)和事件廣播。這是一個(gè)允許請(qǐng)求的請(qǐng)求響應(yīng)機(jī)制。這包括服務(wù)發(fā)現(xiàn),還包括豐富的運(yùn)行狀況檢查,鎖定,鍵值,多數(shù)據(jù)中心聯(lián)合,事件系統(tǒng)和。
轉(zhuǎn)載請(qǐng)標(biāo)明出處:什么是Consul
http://blog.csdn.net/forezp/a...
本文出自方志朋的博客
Consul是HashiCorp公司推出的開源軟件,使用GO語言編寫,提供了分布式系統(tǒng)的服務(wù)注冊(cè)和發(fā)現(xiàn)、配置等功能,這些功能中的每一個(gè)都可以根據(jù)需要多帶帶使用,也可以一起使用以構(gòu)建全方位的服務(wù)網(wǎng)格。Consul不僅具有服務(wù)治理的功能,而且使用分布式一致協(xié)議RAFT算法實(shí)現(xiàn),有多數(shù)據(jù)中心的高可用方案,并且很容易和Spring Cloud等微服務(wù)框架集成,使用起來非常的簡(jiǎn)單,具有簡(jiǎn)單、易用、可插排等特點(diǎn)。使用簡(jiǎn)而言之,Consul提供了一種完整的服務(wù)網(wǎng)格解決方案 。
Consul具有以下的特點(diǎn)和功能服務(wù)發(fā)現(xiàn):Consul的客戶端可以向Consul注冊(cè)服務(wù),例如api服務(wù)或者mysql服務(wù),其他客戶端可以使用Consul來發(fā)現(xiàn)服務(wù)的提供者。Consul支持使用DNS或HTTP來注冊(cè)和發(fā)現(xiàn)服務(wù)。
運(yùn)行時(shí)健康檢查:Consul客戶端可以提供任意數(shù)量的運(yùn)行狀況檢查機(jī)制,這些檢查機(jī)制可以是給定服務(wù)(“是Web服務(wù)器返回200 OK”)或本地節(jié)點(diǎn)(“內(nèi)存利用率低于90%”)相關(guān)聯(lián)。這些信息可以用來監(jiān)控群集的運(yùn)行狀況,服務(wù)發(fā)現(xiàn)組件可以使用這些監(jiān)控信息來路由流量,可以使流量遠(yuǎn)離不健康的服務(wù)。
KV存儲(chǔ):應(yīng)用程序可以將Consul的鍵/值存儲(chǔ)用于任何需求,包括動(dòng)態(tài)配置,功能標(biāo)記,協(xié)調(diào),領(lǐng)導(dǎo)者選舉等。它采用HTTP API使其易于使用。
安全服務(wù)通信:Consul可以為服務(wù)生成和分發(fā)TLS證書,以建立相互的TLS連接。
多數(shù)據(jù)中心:Consul支持多個(gè)數(shù)據(jù)中心。這意味著Consul的用戶不必?fù)?dān)心構(gòu)建額外的抽象層以擴(kuò)展到多個(gè)區(qū)域。
Consul原理每個(gè)提供服務(wù)的節(jié)點(diǎn)都運(yùn)行了Consul的代理,運(yùn)行代理不需要服務(wù)發(fā)現(xiàn)和獲取配置的KV鍵值對(duì),代理只負(fù)責(zé)監(jiān)控檢查。代理節(jié)點(diǎn)可以和一個(gè)或者多個(gè)Consul server通訊。 Consul服務(wù)器是存儲(chǔ)和復(fù)制數(shù)據(jù)的地方。服務(wù)器本身選出了領(lǐng)導(dǎo)者。雖然Consul可以在一臺(tái)服務(wù)器上運(yùn)行,但建議使用3到5,以避免導(dǎo)致數(shù)據(jù)丟失的故障情況。建議為每個(gè)數(shù)據(jù)中心使用一組Consul服務(wù)器。
如果你的組件需要發(fā)現(xiàn)服務(wù),可以查詢?nèi)魏蜟onsul Server或任何Consul客戶端,Consul客戶端會(huì)自動(dòng)將查詢轉(zhuǎn)發(fā)給Consul Server。
需要發(fā)現(xiàn)其他服務(wù)或節(jié)點(diǎn)的基礎(chǔ)架構(gòu)組件可以查詢?nèi)魏蜟onsul服務(wù)器或任何Consul代理。代理會(huì)自動(dòng)將查詢轉(zhuǎn)發(fā)給服務(wù)器。每個(gè)數(shù)據(jù)中心都運(yùn)行Consul服務(wù)器集群。發(fā)生跨數(shù)據(jù)中心服務(wù)發(fā)現(xiàn)或配置請(qǐng)求時(shí),本地Consul服務(wù)器會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到遠(yuǎn)程數(shù)據(jù)中心并返回結(jié)果。
術(shù)語
Agent agent是一直運(yùn)行在Consul集群中每個(gè)成員上的守護(hù)進(jìn)程。通過運(yùn)行 consul agent 來啟動(dòng)。agent可以運(yùn)行在client或者server模式。指定節(jié)點(diǎn)作為client或者server是非常簡(jiǎn)單的,除非有其他agent實(shí)例。所有的agent都能運(yùn)行DNS或者HTTP接口,并負(fù)責(zé)運(yùn)行時(shí)檢查和保持服務(wù)同步。
Client 一個(gè)Client是一個(gè)轉(zhuǎn)發(fā)所有RPC到server的代理。這個(gè)client是相對(duì)無狀態(tài)的。client唯一執(zhí)行的后臺(tái)活動(dòng)是加入LAN gossip池。這有一個(gè)最低的資源開銷并且僅消耗少量的網(wǎng)絡(luò)帶寬。
Server 一個(gè)server是一個(gè)有一組擴(kuò)展功能的代理,這些功能包括參與Raft選舉,維護(hù)集群狀態(tài),響應(yīng)RPC查詢,與其他數(shù)據(jù)中心交互WAN gossip和轉(zhuǎn)發(fā)查詢給leader或者遠(yuǎn)程數(shù)據(jù)中心。
DataCenter 雖然數(shù)據(jù)中心的定義是顯而易見的,但是有一些細(xì)微的細(xì)節(jié)必須考慮。例如,在EC2中,多個(gè)可用區(qū)域被認(rèn)為組成一個(gè)數(shù)據(jù)中心?我們定義數(shù)據(jù)中心為一個(gè)私有的,低延遲和高帶寬的一個(gè)網(wǎng)絡(luò)環(huán)境。這不包括訪問公共網(wǎng)絡(luò),但是對(duì)于我們而言,同一個(gè)EC2中的多個(gè)可用區(qū)域可以被認(rèn)為是一個(gè)數(shù)據(jù)中心的一部分。
Consensus 在我們的文檔中,我們使用Consensus來表明就leader選舉和事務(wù)的順序達(dá)成一致。由于這些事務(wù)都被應(yīng)用到有限狀態(tài)機(jī)上,Consensus暗示復(fù)制狀態(tài)機(jī)的一致性。
Gossip Consul建立在Serf的基礎(chǔ)之上,它提供了一個(gè)用于多播目的的完整的gossip協(xié)議。Serf提供成員關(guān)系,故障檢測(cè)和事件廣播。更多的信息在gossip文檔中描述。這足以知道gossip使用基于UDP的隨機(jī)的點(diǎn)到點(diǎn)通信。
LAN Gossip 它包含所有位于同一個(gè)局域網(wǎng)或者數(shù)據(jù)中心的所有節(jié)點(diǎn)。
WAN Gossip 它只包含Server。這些server主要分布在不同的數(shù)據(jù)中心并且通常通過因特網(wǎng)或者廣域網(wǎng)通信。
RPC 遠(yuǎn)程過程調(diào)用。這是一個(gè)允許client請(qǐng)求server的請(qǐng)求/響應(yīng)機(jī)制。
讓我們分解這張圖并描述每個(gè)部分。首先,我們能看到有兩個(gè)數(shù)據(jù)中心,標(biāo)記為“1”和“2”。Consul對(duì)多數(shù)據(jù)中心有一流的支持并且希望這是一個(gè)常見的情況。
在每個(gè)數(shù)據(jù)中心,client和server是混合的。一般建議有3-5臺(tái)server。這是基于有故障情況下的可用性和性能之間的權(quán)衡結(jié)果,因?yàn)樵蕉嗟臋C(jī)器加入達(dá)成共識(shí)越慢。然而,并不限制client的數(shù)量,它們可以很容易的擴(kuò)展到數(shù)千或者數(shù)萬臺(tái)。
同一個(gè)數(shù)據(jù)中心的所有節(jié)點(diǎn)都必須加入gossip協(xié)議。這意味著gossip協(xié)議包含一個(gè)給定數(shù)據(jù)中心的所有節(jié)點(diǎn)。這服務(wù)于幾個(gè)目的:第一,不需要在client上配置server地址。發(fā)現(xiàn)都是自動(dòng)完成的。第二,檢測(cè)節(jié)點(diǎn)故障的工作不是放在server上,而是分布式的。這是的故障檢測(cè)相比心跳機(jī)制有更高的可擴(kuò)展性。第三:它用來作為一個(gè)消息層來通知事件,比如leader選舉發(fā)生時(shí)。
每個(gè)數(shù)據(jù)中心的server都是Raft節(jié)點(diǎn)集合的一部分。這意味著它們一起工作并選出一個(gè)leader,一個(gè)有額外工作的server。leader負(fù)責(zé)處理所有的查詢和事務(wù)。作為一致性協(xié)議的一部分,事務(wù)也必須被復(fù)制到所有其他的節(jié)點(diǎn)。因?yàn)檫@一要求,當(dāng)一個(gè)非leader得server收到一個(gè)RPC請(qǐng)求時(shí),它將請(qǐng)求轉(zhuǎn)發(fā)給集群leader。
server節(jié)點(diǎn)也作為WAN gossip Pool的一部分。這個(gè)Pool不同于LAN Pool,因?yàn)樗菫榱藘?yōu)化互聯(lián)網(wǎng)更高的延遲,并且它只包含其他Consul server節(jié)點(diǎn)。這個(gè)Pool的目的是為了允許數(shù)據(jù)中心能夠以low-touch的方式發(fā)現(xiàn)彼此。這使得一個(gè)新的數(shù)據(jù)中心可以很容易的加入現(xiàn)存的WAN gossip。因?yàn)閟erver都運(yùn)行在這個(gè)pool中,它也支持跨數(shù)據(jù)中心請(qǐng)求。當(dāng)一個(gè)server收到來自另一個(gè)數(shù)據(jù)中心的請(qǐng)求時(shí),它隨即轉(zhuǎn)發(fā)給正確數(shù)據(jù)中想一個(gè)server。該server再轉(zhuǎn)發(fā)給本地leader。
這使得數(shù)據(jù)中心之間只有一個(gè)很低的耦合,但是由于故障檢測(cè),連接緩存和復(fù)用,跨數(shù)據(jù)中心的請(qǐng)求都是相對(duì)快速和可靠的。
Consul 服務(wù)注冊(cè)發(fā)現(xiàn)流程Consul在業(yè)界最廣泛的用途就是作為服務(wù)注冊(cè)中心,同Eureka類型,consul作為服務(wù)注冊(cè)中心,它的注冊(cè)和發(fā)現(xiàn)過程如下圖:
在上面的流程圖上有三個(gè)角色,分別為服務(wù)注冊(cè)中心、服務(wù)提供者、服務(wù)消費(fèi)者。
服務(wù)提供者Provider啟動(dòng)的時(shí)候,會(huì)向Consul發(fā)送一個(gè)請(qǐng)求,將自己的host、ip、應(yīng)用名、健康檢查等元數(shù)據(jù)信息發(fā)送給Consul
Consul 接收到 Provider 的注冊(cè)后,定期向 Provider 發(fā)送健康檢查的請(qǐng)求,檢驗(yàn)Provider是否健康
服務(wù)消費(fèi)者Consumer會(huì)從注冊(cè)中心Consul中獲取服務(wù)注冊(cè)列表,當(dāng)服務(wù)消費(fèi)者消費(fèi)服務(wù)時(shí),根據(jù)應(yīng)用名從服務(wù)注冊(cè)列表獲取到具體服務(wù)的實(shí)例(1個(gè)或者多個(gè)),從而完成服務(wù)的調(diào)用。
Consul VS EurekaEureka是一種服務(wù)發(fā)現(xiàn)工具。 該體系結(jié)構(gòu)主要是客戶端/服務(wù)器,每個(gè)數(shù)據(jù)中心有一組Eureka服務(wù)器,通常每個(gè)可用區(qū)域一個(gè)。 通常,Eureka的客戶使用嵌入式SDK來注冊(cè)和發(fā)現(xiàn)服務(wù)。 對(duì)于非本地集成的客戶端,使用Ribbon等邊車通過Eureka透明地發(fā)現(xiàn)服務(wù)。
Eureka使用盡力而為的復(fù)制提供弱一致的服務(wù)視圖。 當(dāng)客戶端向服務(wù)器注冊(cè)時(shí),該服務(wù)器將嘗試復(fù)制到其他服務(wù)器但不提供保證。 服務(wù)注冊(cè)的生存時(shí)間很短(TTL),要求客戶端對(duì)服務(wù)器進(jìn)行心跳檢測(cè)。 不健康的服務(wù)或節(jié)點(diǎn)將停止心跳,導(dǎo)致它們超時(shí)并從注冊(cè)表中刪除。 發(fā)現(xiàn)請(qǐng)求可以路由到任何服務(wù),由于盡力復(fù)制,這些服務(wù)可以提供過時(shí)或丟失的數(shù)據(jù)。 這種簡(jiǎn)化的模型允許輕松的集群管理和高可擴(kuò)展性。
Consul提供了一系列超級(jí)功能,包括更豐富的運(yùn)行狀況檢查,鍵/值存儲(chǔ)和多數(shù)據(jù)中心感知。 Consul需要每個(gè)數(shù)據(jù)中心中的一組服務(wù)器,以及每個(gè)客戶端上的代理,類似于使用像Ribbon這樣的邊車。 Consul代理允許大多數(shù)應(yīng)用程序不知道Consul,通過配置文件執(zhí)行服務(wù)注冊(cè)以及通過DNS或負(fù)載平衡器sidecars進(jìn)行發(fā)現(xiàn)。
Consul提供強(qiáng)大的一致性保證,因?yàn)榉?wù)器使用Raft協(xié)議復(fù)制狀態(tài)。 Consul支持豐富的運(yùn)行狀況檢查,包括TCP,HTTP,Nagios / Sensu兼容腳本或基于的Eureka的TTL。 客戶端節(jié)點(diǎn)參與基于gossip的健康檢查,該檢查分發(fā)健康檢查的工作,而不像集中式心跳,這成為可擴(kuò)展性挑戰(zhàn)。 發(fā)現(xiàn)請(qǐng)求被路由到當(dāng)選的Consul領(lǐng)導(dǎo)者,這使他們默認(rèn)情況下非常一致。 允許過時(shí)讀取的客戶端允許任何服務(wù)器處理其請(qǐng)求,從而允許像Eureka一樣的線性可伸縮性。
Consul的強(qiáng)烈一致性意味著它可以用作領(lǐng)導(dǎo)者選舉和集群協(xié)調(diào)的鎖定服務(wù)。 Eureka不提供類似的保證,并且通常需要為需要執(zhí)行協(xié)調(diào)或具有更強(qiáng)一致性需求的服務(wù)運(yùn)行ZooKeeper。
Consul提供了支持面向服務(wù)的體系結(jié)構(gòu)所需的功能工具包。 這包括服務(wù)發(fā)現(xiàn),還包括豐富的運(yùn)行狀況檢查,鎖定,鍵/值,多數(shù)據(jù)中心聯(lián)合,事件系統(tǒng)和ACL。 Consul和consul-template和envconsul等工具生態(tài)系統(tǒng)都試圖最大限度地減少集成所需的應(yīng)用程序更改,以避免需要通過SDK進(jìn)行本機(jī)集成。 Eureka是更大的Netflix OSS套件的一部分,該套件期望應(yīng)用程序相對(duì)同質(zhì)且緊密集成。 因此,Eureka只解決了有限的一部分問題,期望其他工具如ZooKeeper可以同時(shí)使用。
Eureka Server端采用的是P2P的復(fù)制模式,但是它不保證復(fù)制操作一定能成功,因此它提供的是一個(gè)最終一致性的服務(wù)實(shí)例視圖;Client端在Server端的注冊(cè)信息有一個(gè)帶期限的租約,一旦Server端在指定期間沒有收到Client端發(fā)送的心跳,則Server端會(huì)認(rèn)定為Client端注冊(cè)的服務(wù)是不健康的,定時(shí)任務(wù)將會(huì)將其從注冊(cè)表中刪除。Consul與Eureka不同,Consul采用Raft算法,可以提供強(qiáng)一致性的保證,Consul的agent相當(dāng)于Netflix Ribbon + Netflix Eureka Client,而且對(duì)應(yīng)用來說相對(duì)透明,同時(shí)相對(duì)于Eureka這種集中式的心跳檢測(cè)機(jī)制,Consul的agent可以參與到基于goosip協(xié)議的健康檢查,分散了server端的心跳檢測(cè)壓力。除此之外,Consul為多數(shù)據(jù)中心提供了開箱即用的原生支持等。
Consul下載和安裝Consul采用Go語言編寫,支持Linux、Mac、Windows等各大操作系統(tǒng),本文使用windows操作系統(tǒng),下載地址:https://www.consul.io/downloa...,下完成后解壓到計(jì)算機(jī)目錄下,解壓成功后,只有一個(gè)可執(zhí)行的consul.exe可執(zhí)行文件。打開cmd終端,切換到目錄,執(zhí)行以下命令:
consul --version
終端顯示如下:
Consul v1.4.2 Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use p rotocol >2 when speaking to compatible agents)
證明consul下載成功了,并可執(zhí)行。
consul的一些常見的執(zhí)行命令如下:
命令 | 解釋 | 示例 |
---|---|---|
agent | 運(yùn)行一個(gè)consul agent | consul agent -dev |
join | 將agent加入到consul集群 | consul join IP |
members | 列出consul cluster集群中的members | consul members |
leave | 將節(jié)點(diǎn)移除所在集群 | consul leave |
更多命令請(qǐng)查看官方網(wǎng)站:https://www.consul.io/docs/co...
開發(fā)模式啟動(dòng):
consul agent -dev
啟動(dòng)成功,在瀏覽器上訪問:http://localhost:8500,顯示的界面如下:
spring cloud consul該項(xiàng)目通過自動(dòng)配置并綁定到Spring環(huán)境和其他Spring編程模型成語,為Spring Boot應(yīng)用程序提供Consul集成。通過幾個(gè)簡(jiǎn)單的注釋,您可以快速啟用和配置應(yīng)用程序中的常見模式,并使用基于Consul的組件構(gòu)建大型分布式系統(tǒng)。提供的模式包括服務(wù)發(fā)現(xiàn),控制總線和配置。智能路由(Zuul)和客戶端負(fù)載平衡(Ribbon),斷路器(Hystrix)通過與Spring Cloud Netflix的集成提供。
使用spring cloud consul來服務(wù)注冊(cè)與發(fā)現(xiàn)本小節(jié)以案例的形式來講解如何使用Spring Cloud Consul來進(jìn)行服務(wù)注冊(cè)和發(fā)現(xiàn)的,并且使用Feign來消費(fèi)服務(wù)。再講解之前,已經(jīng)啟動(dòng)consul的agent,并且在瀏覽器上http://localhost:8500能夠顯示正確的頁面。本案例一共有2個(gè)工程,分別如下:
工程名 | 端口 | 描述 |
---|---|---|
consul-provider | 8763 | 服務(wù)提供者 |
consul-consumer | 8765 | 服務(wù)消費(fèi)者 |
其中,服務(wù)提供者和服務(wù)消費(fèi)者分別向consul注冊(cè),注冊(cè)完成后,服務(wù)消費(fèi)者通過FeignClient來消費(fèi)服務(wù)提供者的服務(wù)。
服務(wù)提供者consul-provider創(chuàng)建一個(gè)工程consul-provider,在工程的pom文件引入以下依賴,包括consul-discovery的起步依賴,該依賴是spring cloud consul用來向consul 注冊(cè)和發(fā)現(xiàn)服務(wù)的依賴,采用REST API的方式進(jìn)行通訊。另外加上web的起步依賴,用于對(duì)外提供REST API。代碼如下:
org.springframework.cloud spring-cloud-starter-consul-discovery org.springframework.boot spring-boot-starter-web
在工程的配置文件application.yml做下以下配置:
server: port: 8763 spring: application: name: consul-provider cloud: consul: host: localhost port: 8500 discovery: serviceName: consul-provider
上面的配置,指定了程序的啟動(dòng)端口為8763,應(yīng)用名為consul-provider,consul注冊(cè)中心的地址為localhost:8500
在程序員的啟動(dòng)類ConsulProviderApplication加上@EnableDiscoveryClient注解,開啟服務(wù)發(fā)現(xiàn)的功能。
@SpringBootApplication @EnableDiscoveryClient public class ConsulProviderApplication { public static void main(String[] args) { SpringApplication.run(ConsulProviderApplication.class, args); } }
寫一個(gè)RESTAPI,該API為一個(gè)GET請(qǐng)求,返回當(dāng)前程序的啟動(dòng)端口,代碼如下。
@RestController public class HiController { @Value("${server.port}") String port; @GetMapping("/hi") public String home(@RequestParam String name) { return "hi "+name+",i am from port:" +port; } }
啟動(dòng)工程,在瀏覽器上訪問http://localhost:8500,頁面顯示如下:
從上圖可知,consul-provider服務(wù)已經(jīng)成功注冊(cè)到consul上面去了。
服務(wù)消費(fèi)者consul-provider服務(wù)消費(fèi)者的搭建過程同服務(wù)提供者,在pom文件中引入的依賴同服務(wù)提供者,在配置文件application.yml配置同服務(wù)提供者,不同的點(diǎn)在端口為8765,服務(wù)名為consul-consumer。
寫一個(gè)FeignClient,該FeignClient調(diào)用consul-provider的REST API,代碼如下:
@FeignClient(value = "consul-provider") public interface EurekaClientFeign { @GetMapping(value = "/hi") String sayHiFromClientEureka(@RequestParam(value = "name") String name); }
Service層代碼如下:
@Service public class HiService { @Autowired EurekaClientFeign eurekaClientFeign; public String sayHi(String name){ return eurekaClientFeign.sayHiFromClientEureka(name); } }
對(duì)外提供一個(gè)REST API,該API調(diào)用了consul-provider的服務(wù),代碼如下:
@RestController public class HiController { @Autowired HiService hiService; @GetMapping("/hi") public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){ return hiService.sayHi(name); } }
在瀏覽器上訪問http://localhost:8765/hi,瀏覽器響應(yīng)如下:
hi forezp,i am from port:8763
這說明consul-consumer已經(jīng)成功調(diào)用了consul-provider的服務(wù)。這說明consul-provider的服務(wù)已經(jīng)注冊(cè)到了consul的注冊(cè)中心上面去了。consul-consumer能夠獲取注冊(cè)中心的注冊(cè)列表來獲來消費(fèi)服務(wù)。
使用Spring Cloud Consul Config來做服務(wù)配置中心Consul不僅能用來服務(wù)注冊(cè)和發(fā)現(xiàn),Consul而且支持Key/Value鍵值對(duì)的存儲(chǔ),可以用來做配置中心。Spring Cloud 提供了Spring Cloud Consul Config依賴去和Consul相集成,用來做配置中心。
現(xiàn)在以案例的形式來講解如何使用Consul作為配置中心,本案例在上一個(gè)案例的consul-provider基礎(chǔ)上進(jìn)行改造。首先在工程的pom文件加上consul-config的起步依賴,代碼如下:
org.springframework.cloud spring-cloud-starter-consul-config
然后在配置文件application.yml加上以下的以下的配置,配置如下:
spring: profiles: active: dev
上面的配置指定了SpringBoot啟動(dòng)時(shí)的讀取的profiles為dev。
然后再工程的啟動(dòng)配置文件bootstrap.yml文件中配置以下的配置:
spring: application: name: consul-provider cloud: consul: host: localhost port: 8500 discovery: serviceName: consul-provider config: enabled: true format: yaml prefix: config profile-separator: ":" data-key: data
關(guān)于spring.cloud.consul.config的配置項(xiàng)描述如下:
enabled 設(shè)置config是否啟用,默認(rèn)為true
format 設(shè)置配置的值的格式,可以yaml和properties
prefix 設(shè)置配的基本目錄,比如config
defaultContext 設(shè)置默認(rèn)的配置,被所有的應(yīng)用讀取,本例子沒用的
profileSeparator profiles配置分隔符,默認(rèn)為‘,’
date-key為應(yīng)用配置的key名字,值為整個(gè)應(yīng)用配置的字符串。
網(wǎng)頁上訪問consul的KV存儲(chǔ)的管理界面,即http://localhost:8500/ui/dc1/kv,創(chuàng)建一條記錄,
key值為:config/consul-provider:dev/data
value值如下:
foo: bar: bar1 server: port: 8081
在consul-provider工程新建一個(gè)API,該API返回從consul 配置中心讀取foo.bar的值,代碼如下:
@RestController public class FooBarController { @Value("${foo.bar}") String fooBar; @GetMapping("/foo") public String getFooBar() { return fooBar; } }
啟動(dòng)工程,可以看到程序的啟動(dòng)端口為8081,即是consul的配置中心配置的server.port端口。
工程啟動(dòng)完成后,在瀏覽器上訪問http://localhost:8081/foo,頁面顯示bar1。由此可知,應(yīng)用consul-provider已經(jīng)成功從consul的配置中心讀取了配置foo.bar的配置。
當(dāng)使用spring cloud config作為配置中心的時(shí)候,可以使用spring cloud config bus支持動(dòng)態(tài)刷新配置。Spring Cloud Comsul Config默認(rèn)就支持動(dòng)態(tài)刷新,只需要在需要?jiǎng)討B(tài)刷新的類上加上@RefreshScope注解即可,修改代碼如下:
@RestController @RefreshScope public class FooBarController { @Value("${foo.bar}") String fooBar; @GetMapping("/foo") public String getFooBar() { return fooBar; } }
啟動(dòng)consul-provider工程,在瀏覽器上訪問http://localhost:8081/foo,頁面顯示bar1。然后
在網(wǎng)頁上訪問consul的KV存儲(chǔ)的管理界面,即http://localhost:8500/ui/dc1/kv,修改config/consul-provider:dev/data的值,修改后的值如下:
foo: bar: bar2 server: port: 8081
此時(shí)不重新啟動(dòng)consul-provider,在瀏覽器上訪問http://localhost:8081/foo,頁面顯示bar2。可見foo.bar的最新配置在應(yīng)用不重啟的情況下已經(jīng)生效。
注意事項(xiàng)consul支持的KV存儲(chǔ)的Value值不能超過512KB
Consul的dev模式,所有數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,重啟Consul的時(shí)候會(huì)導(dǎo)致所有數(shù)據(jù)丟失,在正式的環(huán)境中,Consul的數(shù)據(jù)會(huì)持久化,數(shù)據(jù)不會(huì)丟失。
參考資料https://www.consul.io/intro/i...
https://www.consul.io/docs/in...
https://www.consul.io/intro/v...
http://www.ityouknow.com/spri...
https://springcloud.cc/spring...
https://www.cnblogs.com/lsf90...
https://blog.csdn.net/longgeq...
更多閱讀史上最簡(jiǎn)單的 SpringCloud 教程匯總
SpringBoot教程匯總
Java面試題系列匯總
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77456.html
摘要:在服務(wù)治理方面,相較于而言,并不成熟。遺憾的是,往往被部分開發(fā)者片面地視作服務(wù)治理的框架,而非微服務(wù)基礎(chǔ)設(shè)施。因此,建議開發(fā)人員將或者遷移為服務(wù)。因此,下一步需要將其配置服務(wù)遠(yuǎn)程。當(dāng)服務(wù)提供方啟動(dòng)后,下一步實(shí)現(xiàn)一個(gè)服務(wù)消費(fèi)方。 原文鏈接:Dubbo Spring Cloud 重塑微服務(wù)治理,來自于微信公眾號(hào):次靈均閣 摘要 在 Java 微服務(wù)生態(tài)中,Spring Cloud1 成為...
摘要:服務(wù)提供者提供一個(gè)接口,服務(wù)消費(fèi)者通過消費(fèi)服務(wù)。服務(wù)提供者服務(wù)提供者,對(duì)外提供一個(gè),并向服務(wù)注冊(cè)中心注冊(cè),這部分內(nèi)容,不再講述,見源碼。 微服務(wù)架構(gòu)是一個(gè)分布式架構(gòu),微服務(wù)系統(tǒng)按業(yè)務(wù)劃分服務(wù)單元,一個(gè)微服務(wù)系統(tǒng)往往有很多個(gè)服務(wù)單元。由于服務(wù)單元數(shù)量眾多,業(yè)務(wù)的復(fù)雜性較高,如果出現(xiàn)了錯(cuò)誤和異常,很難去定位。主要體現(xiàn)在一個(gè)請(qǐng)求可能需要調(diào)用很多個(gè)服務(wù),而內(nèi)部服務(wù)的調(diào)用復(fù)雜性決定了問題難以定位...
摘要:服務(wù)治理上是由開源的一款基于的服務(wù)治理組件,包括及。由于種種原因,版本已經(jīng)凍結(jié)開發(fā),目前最新版本是年月份發(fā)布的版本。服務(wù)發(fā)現(xiàn)選型其中比較受眾關(guān)注的就是和這兩款產(chǎn)品,這兩款產(chǎn)品各有所長(zhǎng),各有所適,開發(fā)者可用按需選擇。 服務(wù)治理:Spring Cloud Eureka(上) Netflix Eureka是由Netflix開源的一款基于REST的服務(wù)治理組件,包括Eureka Server及...
摘要:并向注冊(cè)中心注冊(cè),注冊(cè)地址為,最后將的所有端口暴露出來,配置如下在工程的啟動(dòng)類加上注解,開啟的功能,加上注解開啟的功能。在啟動(dòng)類加上注解,開啟的功能。 轉(zhuǎn)載請(qǐng)標(biāo)明出處: https://www.fangzhipeng.com本文出自方志朋的博客 Spring Boot Admin簡(jiǎn)介 Spring Boot Admin是一個(gè)開源社區(qū)項(xiàng)目,用于管理和監(jiān)控SpringBoot應(yīng)用程序。 ...
摘要:正式版在這天正式發(fā)布了,下面我們來看下有哪些更新內(nèi)容。生命周期終止提醒版本將于正式退役,具體可以參考官方宣布版本作為的主要版本,的生命周期也會(huì)由版本的終止而終止。進(jìn)入維護(hù)模式最近,宣布進(jìn)入維護(hù)模式停止開發(fā)。。。 Spring Cloud Greenwich 正式版在 01/23/2019 這天正式發(fā)布了,下面我們來看下有哪些更新內(nèi)容。 生命周期終止提醒 Spring Cloud Edg...
閱讀 3759·2021-11-25 09:43
閱讀 2191·2021-11-23 10:13
閱讀 823·2021-11-16 11:44
閱讀 2369·2019-08-29 17:24
閱讀 1384·2019-08-29 17:17
閱讀 3480·2019-08-29 11:30
閱讀 2584·2019-08-26 13:23
閱讀 2345·2019-08-26 12:10