Nacos+LoadBalancer實現服務注冊與發現

目錄

一、相關文章

二、兼容說明

三、服務注冊到Nacos

四、服務發現

五、服務分級存儲模型

六、查看集群服務

七、LoadBalancer負載均衡?


一、相關文章
  • 基礎工程:gradle7.6.1+springboot3.2.4創建微服務工程-CSDN博客

  • Nacos服務端安裝:Nacos服務端安裝-CSDN博客

  • Nacos架構&原理:https://www.yuque.com/nacos/ebook/un9fgs

  • LoadBalancer官方文檔:https://spring.io/guides/gs/spring-cloud-loadbalancer

  • LoadBalancer自定義策略:https://blog.csdn.net/BASK2312/article/details/129025006

二、兼容說明
  • 與SpringBoot3兼容的SpringCloud里的nacos-discovery依賴不含Ribbon,新增了LoadBalancer。

  • 如果想使用Ribbon做負載均衡,參考https://blog.csdn.net/cherishSpring/article/details/149472343。

  • 使用SpringBoot3,即使單獨引用了Ribbon也是不生效的。

三、服務注冊到Nacos

1、父工程cloud-demo3.0引入依賴

  • SpringCloud及SpringCloudAlibaba需根據SpringBoot參照[版本對照表]:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明

  • dependencyManagement引入依賴版本管理包,其管理的依賴引入不需要再指定版本

  • 查看管理依賴版本[spring-cloud-dependencies]:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/2023.0.1

  • 查看管理依賴版本[spring-cloud-alibaba-dependencies]:https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies/2023.0.0.0-RC1

dependencyManagement {  imports { mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:2023.0.0.0-RC1" }  imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:2023.0.1" }  
}  dependencies {  //nacos  implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'  //springcloud2021開始,使用loadbalancer處理客戶端負載均衡  implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
}

?2、子工程application.yml配置

spring:  application:  name: order-service  cloud:  nacos:  # nacos 服務端地址  server-addr: 192.168.10.104:10001  discovery:  # 命名空間ID,需在注冊中心創建再指定namespace: 44480e91-8290-43e4-9129-2d2d42ecd30a  # 配置集群名稱,也就是機房位置,如:HZ,杭州  cluster-name: HZ  # nacos登錄  username: nacos  password: nacos# 是否是臨時實例,臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除ephemeral: false

3、臨時實例與非臨時實例區別:參考[[Nacos和Eureka對比]]中Nacos與Eureka的區別?

4、?非臨時實例必須調api才能刪除,否則對應工程改為臨時實例啟動不了

### user-刪除nacos注冊中心user-service服務  
DELETE http://127.0.0.1:10001/nacos/v2/ns/instance?serviceName=user-service&ip=192.168.10.104&port=8083&namespaceId=44480e91-8290-43e4-9129-2d2d42ecd30a&clusterName=HZ&ephemeral=false&groupName=DEFAULT_GROUP  
Content-Type: application/x-www-form-urlencoded

5、在Nacos服務端創建namespace命名空間

  • namespace用來做環境隔離,如生產環境(prod)、開發環境(dev)

  • 每個namespace都有唯一id

  • 不同namespace下的服務不可見,prod的服務不能請求到dev去

6、啟動多個user-service,參考idea中同服務啟動多個-CSDN博客

四、服務發現

1、在OrderApplication類創建RestTemplate

@Bean  
@LoadBalanced  //添加使用負載均衡注解
RestTemplate restTemplate() {  return new RestTemplate();  
}

2、服務遠程調用

//示例:在order服根據用戶ID拉取user服用戶信息
@Override  
public Order getOrderById(Long orderId) {  //獲取訂單信息  Order order = orderMapper.getOrderById(orderId);  //根據訂單用戶ID獲取用戶信息,通過host:port拼接請求路徑//String url = "http://localhost:8083/user/" + order.getUserId();  //eureka方式:通過user-service服務名拼接請求路徑String url = "http://user-service/user/" + order.getUserId();  //執行遠程調用User user = restTemplate.getForObject(url, User.class);  order.setUser(user);  return order;  
}
五、服務分級存儲模型
# 服務分級存儲模型
一級是服務,例如user-service
二級是集群,例如杭州,上海
三級是實例,例如杭州機房的某臺部署了user-service的服務器# 配置集群
spring.cloud.nacos.discovery.cluster-name: HZ

?

六、查看集群服務

七、LoadBalancer負載均衡?

1、默認規則,詳細分析可參考:https://blog.csdn.net/BASK2312/article/details/129025006

默認提供了三種不同的負載均衡器:

  • RandomLoadBalancer(隨機負載均衡器)、

  • RoundRobinLoadBalancer(輪詢負載均衡器)、

  • NacosLoadBalancer(同集群優先調用均衡器)

2、指定使用同集群優先調用策略

  • 創建一個類CustomLoadBalancerConfiguration

  • OrderApplication加注解@LoadBalanced、@LoadBalancerClients

/**  
* Spring Cloud LoadBalancer替代Ribbon實現 隨機/輪詢/同集群優先調用 方式負載均衡策略配置  
*/  
public class CustomLoadBalancerConfiguration {  // Nacos配置屬性  @Resource  private NacosDiscoveryProperties nacosDiscoveryProperties;  /**  * 自定義負載均衡策略(隨機/輪訓/同集群優先調用)  *  * @return ReactorLoadBalancer  */  @Bean  ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory factory) {  String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); //return new NacosSameClusterWeightedRule(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  //同集群優先調用,只有Nacos有,Eureka沒有  return new NacosLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name, nacosDiscoveryProperties);  //隨機  //return new RandomLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  //輪詢  //return new RoundRobinLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  }  
}
@LoadBalancerClients(defaultConfiguration= CustomLoadBalancerConfiguration.class)  
@SpringBootApplication  
public class OrderApplication {  public static void main(String[] args) {  SpringApplication.run(OrderApplication.class, args);  }  @Bean  @LoadBalanced  //該注解表示使用負載均衡RestTemplate restTemplate() {  return new RestTemplate();  }  
}

?3、根據權重負載均衡(權重值在0-1之間)

實際部署中會出現這樣的場景:
服務器設備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。設為0表示后續不會調用,已發生的調用正常執行
設為0.1表示10個請求只有1個請求到8081同集群兩個都為0.1,另一集群為1,設置了同集群優先調用規則,也只調用0.1集群里的服務

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

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

相關文章

事務并發-封鎖協議

事務并發數據庫里面操作的是事務。事務特性&#xff1a;原子性&#xff1a;要么全做&#xff0c;要么不做。一致性&#xff1a;事務發生后數據是一致的。隔離性&#xff1a;任一事務的更新操作直到其成功提交的整個過程對其他事務都是不可見的&#xff0c;不同事務之間是隔離的…

大氣波導數值預報方法全解析:理論基礎、預報模型與誤差來源

我們希望能夠像天氣預報一樣&#xff0c;準確預測何時、何地會出現大氣波導&#xff0c;其覆蓋范圍有多大、持續時間有多長&#xff0c;以便為通信、雷達等應用提供可靠的環境保障。 目錄 &#xff08;一&#xff09;氣象預報 1.1 氣象預報的分類 1.2 大氣數值預報基礎 1.2…

關于JavaWeb的總結筆記

JavaWeb基礎描述Web服務器的作用是接受客戶端的請求&#xff0c;給客戶端響應服務器的使用Tomcat&#xff08;最常用的&#xff09;JBossWeblogicWebsphereJavaWeb的三大組件Servlet主要負責接收并處理來自客戶端的請求&#xff0c;隨后生成響應結果。例如&#xff0c;在處理用…

生成式引擎優化(GEO)核心解析:下一代搜索技術的演進與落地策略

最新統計數據聲稱&#xff0c;今天的 Google 搜索量是 ChatGPT 搜索的 373 倍&#xff0c;但我們大多數人都覺得情況恰恰相反。 那是因為很多人不再點擊了。他們在問。 他們不是瀏覽搜索結果&#xff0c;而是從 ChatGPT、Claude 和 Perfasciity 等工具獲得即時的對話式答案。這…

網編數據庫小練習

搭建服務器客戶端&#xff0c;要求 服務器使用 epoll 模型 客戶端使用多線程 服務器打開數據庫&#xff0c;表單格式如下 name text primary key pswd text not null 客戶端做一個簡單的界面&#xff1a;1&#xff1a;注冊2&#xff1a;登錄無論注冊還是登錄&#xff0c;…

理解 PS1/PROMPT 及 macOS iTerm2 + zsh 終端配置優化指南

終端提示符&#xff08;Prompt&#xff09;是我們在命令行中與 shell 交互的關鍵界面&#xff0c;它不僅影響工作效率&#xff0c;也影響終端顯示的穩定和美觀。本文將結合 macOS 上最流行的 iTerm2 終端和 zsh shell&#xff0c;講解 PS1/PROMPT 的核心概念、常見配置技巧&…

Laravel 原子鎖概念講解

引言 什么是競爭條件 (Race Condition)&#xff1f; 在并發編程中&#xff0c;當多個進程或線程同時訪問和修改同一個共享資源時&#xff0c;最終結果會因其執行時序的微小差異而變得不可預測&#xff0c;甚至產生錯誤。這種情況被稱為“競爭條件”。 例子1&#xff1a;定時…

83、形式化方法

形式化方法&#xff08;Formal Methods&#xff09; 是基于嚴格數學基礎&#xff0c;通過數學邏輯證明對計算機軟硬件系統進行建模、規約、分析、推理和驗證的技術&#xff0c;旨在保證系統的正確性、安全性和可靠性。以下從核心思想、關鍵技術、應用場景、優勢與挑戰四個維度展…

解決 Ant Design v5.26.5 與 React 19.0.0 的兼容性問題

#目前 Ant Design v5.x 官方尚未正式支持 React 19&#xff08;截至我的知識截止日期2023年10月&#xff09;&#xff0c;但你仍可以通過以下方法解決兼容性問題&#xff1a; 1. 臨時解決方案&#xff08;推薦&#xff09; 方法1&#xff1a;使用 --legacy-peer-deps 安裝 n…

算法與數據結構(課堂2)

排序與選擇 算法排序分類 基于比較的排序算法&#xff1a; 交換排序 冒泡排序快速排序 插入排序 直接插入排序二分插入排序Shell排序 選擇排序 簡單選擇排序堆排序 合并排序 基于數字和地址計算的排序方法 計數排序桶排序基數排序 簡單排序算法 冒泡排序 void sort(Item a[],i…

跨端分欄布局:從手機到Pad的優雅切換

在 UniApp X 的世界里&#xff0c;我們常常需要解決一個現實問題&#xff1a; “手機上是全屏列表頁&#xff0c;Pad上卻要左右分欄”。這時候&#xff0c;很多人會想到 leftWindow 或 rightWindow。但別急——這些方案 僅限 Web 端&#xff0c;如果你的應用需要跨平臺&#xf…

華為服務器管理工具(Intelligent Platform Management Interface)

一、核心功能與技術架構 硬件級監控與控制 全維度傳感器管理:實時監測 CPU、內存、硬盤、風扇、電源等硬件組件的溫度、電壓、轉速等參數,支持超過 200 種傳感器類型。例如,通過 IPMI 命令ipmitool sdr elist可快速獲取服務器傳感器狀態,并通過正則表達式提取關鍵指標。 遠…

Node.js Express keep-alive 超時時間設置

背景介紹隨著 Web 應用并發量不斷攀升&#xff0c;長連接&#xff08;keep-alive&#xff09;策略已經成為提升性能和資源復用的重要手段。本文將從原理、默認值、優化實踐以及潛在風險等方面&#xff0c;全面剖析如何在 Node.js&#xff08;Express&#xff09;中正確設置和應…

學習C++、QT---30(QT庫中如何自定義控件(自定義按鈕)講解)

每日一言你比想象中更有韌性&#xff0c;那些看似艱難的日子&#xff0c;終將成為勛章。自定義按鈕我們要知道自定義控件就需要我們創建一個新的類加上繼承父類&#xff0c;但是我們還要注意一個點&#xff0c;就是如果我們是自己重頭開始造控件的話&#xff0c;那么我們就直接…

【補充】Linux內核鏈表機制

專題文章&#xff1a;Linux內核鏈表與Pinctrl數據結構解析 目標&#xff1a; 深入解析Pinctrl子系統中&#xff0c;struct pinctrl如何通過內核鏈表&#xff0c;來組織和管理其多個struct pinctrl_state。 1. 問題背景&#xff1a;一個設備&#xff0c;多種引腳狀態 一個復雜的…

本地部署Dify、Docker重裝

需要先安裝一個Docker&#xff0c;Docker就像是一個容器&#xff0c;將部署Dify的空間與本地環境隔離&#xff0c;避免因為本地環境的一些問題導致BUG。也確保了環境的統一&#xff0c;不會出現在自己的電腦上能跑但是移植到別人電腦上就跑不通的情況。那么現在就開始先安裝Doc…

【每天一個知識點】非參聚類(Nonparametric Clustering)

ChatGPT 說&#xff1a;“非參聚類”&#xff08;Nonparametric Clustering&#xff09;是一類不預先設定聚類數目或數據分布形式的聚類方法。與傳統“參數聚類”&#xff08;如高斯混合模型&#xff09;不同&#xff0c;非參聚類在建模過程中不假設數據來自于已知分布數量的某…

人形機器人CMU-ASAP算法理解

一原文在第一階段&#xff0c;用重定位的人體運動數據在模擬中預訓練運動跟蹤策略。在第二階段&#xff0c;在現實世界中部署策略并收集現實世界數據來訓練一個增量&#xff08;殘差&#xff09;動作模型來補償動態不匹配。&#xff0c;ASAP 使用集成到模擬器中的增量動作模型對…

next.js刷新頁面時二級菜單展開狀態判斷

在 Next.js 中保持二級菜單刷新后展開狀態的解決方案 在 Next.js 應用中&#xff0c;當頁面刷新時保持二級菜單的展開狀態&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法1&#xff1a;使用 URL 參數保存狀態&#xff08;推薦&#xff09; import { useRouter } from n…

網絡基礎DAY13-NAT技術

NAT技術internet接入方式&#xff1a;ADLS技術&#xff1a;能夠將不同設備的不同信號通過分離器進行打包之后再internet中傳輸&#xff0c;到另一端的分離器之后再進行分離。傳輸到不同的設備中去。常見光纖接入方式internet接入認證方式&#xff1a;PPPoE&#xff1a;先認證再…