網站首頁 編程語言 正文
Eureka注冊中心
服務注冊與負載均衡
服務注冊
說明一下這個是干嘛用的
Eureka 是 Netflix 出品的用于實現服務注冊和發現的工具,Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模塊來實現服務注冊和發現
Eureka采用C-S的設計架構,包含Eureka Server 和Eureka Client兩個組件
它的原理就是基于服務提供者和服務消費者。像我們的orderservice需要去訪問userservice,那么userservice就是服務提供者,orderservice就是。服務消費者。
服務啟動后向Eureka注冊,Eureka Server會將注冊信息向其他Eureka Server進行同步,當服務消費者要調用服務提供者,則向服務注冊中心獲取服務提供者地址,然后會將服務提供者地址緩存在本地,下次再調用時,則直接從本地緩存中取,完成一次調用。
在默認配置中EurekaServer服務在一定時間(默認為90秒)沒接受到某個服務的心跳連接后,EurekaServer會注銷該服務。但是會存在當網絡分區發生故障,導致該時間內沒有心跳連接,但該服務本身還是健康運行的情況。Eureka通過“自我保護模式”來解決這個問題。
在自我保護模式中,Eureka Server會保護服務注冊表中的信息,不再注銷任何服務實例。
我們可以對服務創建多個節點,如果有的節點掛掉以后,就可以去啟用另外可用的服務。
當然這個是基于springcloud的。所以我們需要導入相關的依賴。
在這之前啊,我們需要將eureka服務端創建出來
我們再創建一個模塊
打開這個pom文件添加必要依賴
然后創建啟動類
一定要注意啟動類要放在java目錄的包下面,所以最好創建包后,將這個啟動類放到下面,不要直接放在java目錄下。
這里我們做的就是服務端。
即熱是服務,那么我們還是要配置一下,比如端口等等,所以需要在resource下面創建一個yml文件。
一定要注意yml文件中字段的層級關系,這是非常嚴格的。
配置完這個后,我們需要配置客戶端。
首先還是需要引入依賴。
useservice 和orderservice都需要導入。
另外需要配置服務端的地址
同樣是都需要配置。
初步的話其實還有一定就是這里
我們需要指定一下服務名稱。先這樣配置一下,然后去啟動
三者都啟動
現在需要去訪問一個地址
注意端口10086后不需要加eureka
我們現在需要去查看服務是否注冊成功,或者說eureka服務端是否將userservice 和orderservice加入實例。
這樣就成功了。
然后我們就可以開啟去使用它了。
這里我們可以修改一下這里
但是在這之前,我們需要做一個負載均衡的指定,否則是無法解析服務地址。
然后這樣
這樣我們再次啟動,就可以去訪問了。
Ribbon負載均衡
上面我們用到了負載策略
負載均衡是高可用網絡基礎架構的關鍵組件,通常用于將工作負載分布到多個服務器來提高網站、應用、數據庫或其他服務的性能和可靠性。
注:圖片數據來自知乎
什么是負載均衡
從這里可以去看負載均衡策略
沒有負載均衡的服務架構
有負載均衡的服務架構
我們這樣的特點可以去用多實例部署的特點。
一定要記得修改端口
將這個服務啟動起來
然后我們去eureka注冊中心看看有沒有實例
可以看到userservice一共有兩個實例對象了。
這樣創建多實例的好處就是如果一個實例存在問題的話就可以換另一個。我們這里就模擬了多實例部署。
還有我們需要去觀察一下這個負載均衡策略,其實默認是輪詢的負載均衡策略。
我們可以去測試,多訪問幾次userservice,而現在userservice有兩個實例,我們在postman測試工具做出測試,發出請求,看看具體調用的哪個實例。
注意現在需要改一個東西,就是上面有一個錯誤的地方。有關日志的。
logging.level設置日志級別,后面跟生效的區域,比如root表示整個項目,也可以設置為某個包下,也可以具體到某個類名(日志級別的值不區分大小寫)這里需要注意,上面的包名沒有寫對。
然后開始測試,首先將控制臺的輸出全部清除掉。
我這里從1到6一共訪問6次。
然后來看控制臺的日志輸出,可見這是輪詢的方式
指定負載均衡規則
默認的是輪詢,我們可以自己去指定一個規則
所以就從這里來重新指定規則
我們在orderservice的啟動類里面寫,當然這個是代碼的方式。并且,我們需要將它做成一個bean。
我們這樣定義是選擇了隨機的原則,代表隨機選擇一個服務器。
然后我們去重新啟動測試
測試成功
如果采用配置文件的方式
兩者配置不同之處在于作用范圍。代碼配置的話就是會在全部服務中起作用,而配置文件配置的話就只會在指定的服務起作用。
還有一個就是關于啟動問題的知識點,默認是懶加載。
我們這樣去配置
原文鏈接:https://blog.csdn.net/jgdabc/article/details/125751557
- 上一篇:數據結構之冒泡排序
- 下一篇:SpringCloud之Gateway統一網關
相關推薦
- 2022-08-22 pyecharts繪制時間輪播圖柱形圖+餅圖+玫瑰圖+折線圖_python
- 2022-11-27 Oracle?中檢查臨時表空間的方法_oracle
- 2024-01-06 RocketMQ重復消費問題
- 2023-12-26 錯誤代碼: 1231Variable ‘sql_notes‘ can‘t be set to the
- 2022-01-18 在使用npm install時遇到的問題 npm ERR! code ERESOLVE
- 2022-08-06 SQL?Server備份數據庫的完整步驟_MsSql
- 2022-04-11 error: failed to push some refs to 遠程倉庫地址 怎么解決
- 2022-03-31 用C語言實現排雷游戲_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支