【Spring Cloud】微服務工程中的服務注冊與發現配置中心-Consul

Catalog

  • Spring Cloud Consul
    • 一、需求
    • 二、是什么
    • 三、優點
    • 四、缺點
    • 五、怎么用
    • 六、細節

Spring Cloud Consul

一、需求

多個微服務之間通過RestTemplate中的api相互調用,一般要寫死微服務的IP地址和端口號,相當于硬編碼,非常不靈活,而且對于某中微服務可能會做負載均衡,這樣通過編碼的方式寫IP地址和端口號,對于一個微服務需要去調用另外一個微服務的時候就非常繁瑣和麻煩,Consul就幫我們解決了這個問題,項目中的每一個微服務都在Consul進行注冊(入駐),微服務之間調用的時候,就通過Consul來需要需要調用的微服務。

除此之外,當一個項目是由多個微服務組成的時候,往往會存在很多通用的配置,比如多個微服務可能使用的都是同一個數據庫的IP地址和端口號,如果在每一個微服務都單獨配置這些通用的配置,當數據庫的IP或者端口改變的時候,就需要去到每一個微服務單獨修改配置文件,當微服務的數量非常多的時候,修改這些配置文件就非常耗時,且意義不大,本著有問題就加一層的原則,我們可以將這些通用的配置信息抽取出來統一管理(全局配置信息),當全局配置信息發生改變的時候,就通知到每一個微服務進行修改,而Consul就可以幫我們做這件事情。

二、是什么

Consul屬于第三方軟件(類似tomcat),是獨立于微服務項目之外的(較于Eureka的優勢所在之一),可以為我們提供服務注冊與發現、代理配置中心等等功能,滿足CP(CAP理論),即保證數據一致性和分區容錯性,但不保證高可用。(Consul官網、Spring官網)

tips:CAP理論

CAP理論,即下面三個詞組的首字母Consistency、 Availability 、 Partition tolerance, 任何分布式系統理論上只能滿足其中任意兩個特性。

  • C:代表數據的強一致性,其實也就是多個節點之間同步數據的時候,如果某個節點同步數據失敗,會直接拒絕后續的請求;
  • A:代表高可用性,是相對于用戶來說,也就是這個分布式系統什么時候都能做出非錯誤響應(數據可能是過期的);
  • P:代表分區容錯性,在分布式系統中,有多個節點,比如有三個節點A、B、C,A和B之間出現網絡故障無法通信,但A和C、B和C仍然可以通信,相當于形成了兩個分區,只有分區內的節點能夠相互通信,這就是網絡分區故障,而分區容忍性代表著系統即使發生網絡分區,也可以繼續運行。

三、優點

  1. 實現了和多微服務項目的解耦(早期的Eureka是耦合在項目中的);
  2. 陽哥筆記:
    Alt

四、缺點

  1. 需要額外維護第三方服務器(Consul服務器)

五、怎么用

下載Consul服務

  1. 官網下載
    Alt

  2. 安裝好后,點擊Exe文件,可能會一閃而過,但不影響使用
    Alt

  3. 在D:\Final-plan\SpringCloud\dev-soft\consul_1.17.1_windows_386目錄下(輸入cmd,進入命令提示符界面),輸入"consul agent -dev"以開發模式啟動:
    Alt

微服務的注冊與發現

  1. 導入Maven坐標;

    		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>
    
  2. 修改微服務配置文件,主要配置微服務在Consul的名字,然后啟動項目;

    spring:application:name: cloud-payment-service# 配置spring cloud consul for discovery servicecloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}
    
  3. 打開Consul的圖形化界面(本機),查看是否有該微服務;

    Alt

  4. 基于Consul,通過RestTemplate實現微服務之間的調用,將原來被調用的微服務的IP地址和端口一并刪掉,換成在Consul中配置的名字;

      //public static final String PaymentSrv_URL = "http://localhost:8001/pay";public static final String PaymentSrv_URL = "http://cloud-payment-service"; //IP地址和端口號修改為在Consul配置的名字,這里是在微服務中的調用方配置的需要調用的微服務地址
    

微服務從Consul拉取配置信息

  1. 導入Maven坐標;

     <!--SpringCloud consul config--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
    
  2. 建立bootstrap.yml文件(resource目錄下),該文件是比application.yml優先級更高的配置文件,會在項目初始化化的時候拉去外部源(這里指的是在Consul中的配置信息)的配置信息;

    spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-',這里配置的是Consul的文件夾命名的分隔符,主要是要識別最后一個分隔符后面的單詞作為環境標識符format: YAML # 規定Spring Cloud程序用什么解析器解析從consul拉取過來的數據watch:wait-time: 1 # 當Consul配置信息發生改變的時候,通知微服務來拉取# config/cloud-payment-service/data
    #       /cloud-payment-service-dev/data
    #       /cloud-payment-service-prod/data
    
  3. 在Consul中配置全局配置中心的信息,注意要創建文件夾輸入的名字的結尾要加’/', 第一個目錄需要指定為config,最后的數據的名字需要指定為data
    Alt

    Alt

    Alt

    Alt

  4. 在application.yml文件中配置使用哪個環境的配置文件(對應到在Consul配置的配置信息文件夾中,最后一個分隔符的名字);
    Alt

    spring:profiles:active: dev# 多環境配置加載內容dev/prod,不寫就是默認default配置
    
  5. 測試從Consul拉取配置信息是否成功,在Controller層測試;

     @Value("${server.port}")private String port;@GetMapping("/get/info")public String getInfoByConsul(@Value("${test.info}") String info){return "test.info: " + info + " " + port;}
    

    Alt

六、細節

  1. 重啟Consul服務器之后,上面設置的全局配置中心就全部清空了,后續需要對這些配置做持久化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19275.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis出現:SQLSyntaxErrorException: Unknown column ‘XXX‘ in ‘field list‘

<update id"updateStudent">update tb_students set stu_name${stuName},stu_gender${stuGender},stu_age${stuAge},stu_tel${stuTel}where stu_num ${stuNum}</update> 本質上來說&#xff0c;是Mybatis使用上的錯誤&#xff0c;不熟悉&#xff0c;理…

C#知識|通過ADO.NET實現應用程序對數據庫的增、刪、改操作。

哈嘍,你好啊,我是雷工! 前邊學習了SQLServer數據庫相關的增刪改查的基本操作, 上節練習了C#通過ADO.NET技術和SQLServer數據庫建立連接和斷開連接的寫法, 本節繼續學習ADO.NET的相關操作,下面為向數據庫中插入數據的相關練習筆記。 01 向數據庫插入數據 插入數據的過程…

SQL函數--union all 使用方法及案例

1. 使用方法 在 SQL 中&#xff0c;UNION ALL 操作用于結合兩個或更多 SELECT 語句的結果集&#xff0c;包括所有匹配的行&#xff0c;甚至包括重復的行。這與 UNION 不同&#xff0c;因為 UNION 會自動刪除重復的行。 滿足條件&#xff1a; 1、兩個select查詢的列的數量必須相…

web前端柜架圖片:探索與解析

web前端柜架圖片&#xff1a;探索與解析 在web前端開發的世界里&#xff0c;圖片的處理與展示是一項至關重要的任務。而“web前端柜架圖片”這一概念&#xff0c;可能初聽起來讓人有些困惑&#xff0c;它究竟指的是什么&#xff1f;在本文中&#xff0c;我們將從四個方面、五個…

Ai速遞5.29

全球AI新聞速遞 1.摩爾線程與無問芯穹合作&#xff0c;實現國產 GPU 端到端 AI 大模型實訓。 2.寶馬工廠&#xff1a;機器狗上崗&#xff0c;可“嗅探”故障隱患。 3.ChatGPT&#xff1a;macOS 開始公測。 4.Stability AI&#xff1a;推出Stable Assistant&#xff0c;可用S…

CCF-GESP 等級考試 2023年3月認證C++一級真題

2024年03月真題 一、單選題&#xff08;每題2分&#xff0c;共30分&#xff09; 第 1 題 以下不屬于計算機輸入設備的有&#xff08; &#xff09;。 A. 鍵盤B. 音箱C. 鼠標D. 傳感器 第 2 題 計算機系統中存儲的基本單位用B來表示&#xff0c;它代表的是&#xff08; &#x…

企業網絡的“瑞士軍刀”:探索“一端多能”設備的多面性

在數字化時代&#xff0c;企業網絡需求的復雜性和多樣性不斷增長&#xff0c;傳統的單一功能網絡設備已難以滿足這些需求。企業需要一種集多種功能于一身的“一端多能”網絡設備&#xff0c;以應對各種網絡環境和業務需求&#xff0c;就像是一把多功能、靈活、可靠的瑞士軍刀&a…

一個月速刷leetcodeHOT100 day13 二叉樹結構 以及相關簡單題

樹是一種分層數據的抽象模型 二叉樹 二叉樹中的節點最多只能有兩個子節點&#xff0c;一個是左側子節點&#xff0c;另一個是右側子節點 二叉搜索樹 二叉搜索樹&#xff08;BST&#xff09;是二叉樹的一種&#xff0c;但是只允許你在左側節點存儲&#xff08;比父節點&…

測試基礎07:測試工作流程規范、進度同步與把控

課程大綱 1、迭代測試流程 2、測試流程 2.1、測試用例評審 目的&#xff1a;對齊產品需求理解&#xff0c;完善、優化測試場景。 參與方&#xff1a;項目、產品、開發、測試。 用例內容&#xff1a;冒煙用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒煙測試 提測…

SOLIDWORKS正版價格多少錢

SOLIDWORKS作為目前應用較為廣泛的3D CAD軟件之一&#xff0c;具有強大的功能和實用性&#xff0c;它為各類工程設計提供綜合解決方案。但是&#xff0c;正版SOLIDWORKS價格是個不可忽視的問題。那SOLIDWORKS的正版價格究竟如何呢&#xff1f;又是受什么因素影響&#xff1f; 先…

【論文閱讀|cryoET】ICE-TIDE

簡介 三維cryoET重建的保真度進一步受到采集過程中物理擾動的影響。這些擾動以各種形式表現出來&#xff0c;例如連續采集之間的樣本漂移&#xff0c;導致連續投影未對準&#xff0c;或者由于未散射的電子而導致二維投影中的局部變形。 傳統的冷凍電子斷層掃描工作流程需要對…

單片機編程的code關鍵字的詮釋

在單片機編程中&#xff0c;code 是一個關鍵字&#xff0c;用于指示編譯器將變量存儲在程序存儲器中&#xff0c;而不是在數據存儲器中。通常情況下&#xff0c;程序存儲器的速度比數據存儲器的速度更快&#xff0c;而且程序存儲器的容量較小&#xff0c;適合存儲常量數據和程序…

mybatis加密數據庫信息

1.配置MyBatisConfig.xml <environments default"development"><!-- 默認--><environment id"development"><transactionManager type"JDBC"/><dataSource type"POOLED"><property name&quo…

朗讀亭主要作用有哪些?

朗讀亭的主要作用有以下幾個方面&#xff1a; 1. 提供朗讀服務&#xff1a;朗讀亭是一個專門的場所&#xff0c;提供給人們朗讀的環境和場地。人們可以在朗讀亭中選擇自己喜歡的書籍或文章&#xff0c;并通過朗讀將其表達出來。這樣可以幫助人們提高朗讀能力&#xff0c;增強自…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比較簡單&#xff0c;就一個異或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要輸入九個數&#xff0c;然后進入處理和判斷&#xff0c;如果滿足條件則進入輸出flag部分&#xff0c;flag和輸入有關&#xff0c;所以要理解需要滿足什么…

【408真題】2009-27

“接”是針對題目進行必要的分析&#xff0c;比較簡略&#xff1b; “化”是對題目中所涉及到的知識點進行詳細解釋&#xff1b; “發”是對此題型的解題套路總結&#xff0c;并結合歷年真題或者典型例題進行運用。 涉及到的知識全部來源于王道各科教材&#xff08;2025版&…

利用C++與Python調用千帆免費大模型,構建個性化AI對話系統

千帆大模型已于2024年4月25日正式免費&#xff0c;調用這個免費的模型以實現自己的AI對話功能&#xff0c;遵循以下步驟&#xff1a; 了解千帆大模型&#xff1a; 千帆大模型是百度智能云推出的一個平臺&#xff0c;提供了一系列AI能力和工具&#xff0c;用于快速開發和應用A…

【以太網端口浪涌靜電防護設計電路】

以太網端口浪涌靜電防護設計電路 注&#xff1a;資料來自 深圳市浪拓電子技術有限公司 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖

python如何安裝tar.gz

首先我們到官網下載tar.gz。 然后解壓我們下載的pip-9.0.1文件&#xff0c;我的解壓后放在d&#xff1a;/p下 運行cmd&#xff0c;輸入cd d:\p&#xff0c;按回車鍵&#xff0c;隨后再次輸入d: 在d:\p>的光標處輸入pip-9.0.1\setup.py install&#xff0c;然后按回車鍵。 最…

水電收費遠程抄表

1.前言&#xff1a;從傳統到現代的改變 水電收費遠程抄表&#xff0c;是科學技術在公共服務領域的一次重要運用&#xff0c;它改變了過去人力上門服務抄表的傳統模式&#xff0c;提高了高效率&#xff0c;降低了偏差&#xff0c;為群眾與企業帶來了極大的便利。這種系統運用智…