Nacos-服務注冊,服務發現(一)

nacos快速入手

Nacos是Spring Cloud Alibaba的組件, Spring Cloud Alibaba遵循Spring Cloud中定義的服務注冊, 服

務發現規范. 因此使?Nacos和使?Eureka對于微服務來說,并沒有太?區別.

主要差異在于:

  • Eureka需要??搭建?個服務, Nacos不???搭建服務, 組件已經準備好了, 只需啟動即可.
  • 對應依賴和配置不同

1.引入spring-cloud-alibaba的依賴

在??程的pom?件中的 <dependencyManagement> 中引?Spring Cloud Alibaba的依賴:

<properties><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope>
</dependency>

<aside> 💡

注意: Spring Boot 和Spring Cloud的版本是有?定對應關系的. Spring Cloud Alibaba也遵循Spring Cloud 的標準, 在引?依賴時, ?定要確認各個版本的對應關系.

Spring Cloud Alibaba 和Spring Cloud版本對應關系, 參考官??檔:

版本發布說明-阿里云Spring Cloud Alibaba官網

版本在?定范圍內可以?由選擇.

</aside>

2.引入Nacos相關的依賴

在order-service和product-service中引?nacos依賴

				<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>//引?Load Balance依賴<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>

3.修改配置

配置項Key默認值說明
服務端地址spring.cloud.nacos.discovery.server-addr?Nacos Server 啟動監聽的ip地址和端?

spring:application:name: product-servicecloud:nacos:discovery:server-addr: 110.41.51.65:10020

4.遠程調用

修改IP為項目名稱

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url = "<http://product-service/product/>" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}

為restTemplate添加負載均衡注解 @LoadBalanced

@Configuration
public class BeanConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

5.測試

啟動order-service 和product-service服務, 觀察Nacos的管理界?, 發現order-service 和product-service 都注冊在Nacos上了。

測試接口:http://127.0.0.1:8080/order/1

啟動多個服務,測試負載均衡

啟動三個 product-service 實例

觀察nacos:

多次訪問,http://127.0.0.1:8080/order/1,觀察日志

常見問題

  1. java.net.UnknownHostException

    2023-12-25T19:04:23.803+08:00 ERROR 25892 --- [nio-8080-exec-1] o.a.c.c.C.[.[.
    [/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 
    in context with path [] threw exception [Request processing failed: 
    org.springframework.web.client.ResourceAccessException: I/O error on GET 
    request for "<http://product-service/product/1001>": product-service] with root 
    cause
    java.net.UnknownHostException: product-serviceat java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:572) ~
    [na:na]at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]at java.base/java.net.Socket.connect(Socket.java:583) ~[na:na]at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:183) ~
    [na:na]at 
    java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:534) ~[na:na]
    ......
    

    檢查是否添加 LoadBalance 依賴

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
    </dependency>
    
  2. 服務注冊失敗

    可能沒有報錯?志, 或者報錯?志如下(與版本有關)

    Parameter 0 of method inetIPv6Utils in
    com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration required a bean of type 
    'org.springframework.cloud.commons.util.InetUtilsProperties' that could not be 
    found.
    The injection point has the following annotations:- 
    @org.springframework.beans.factory.annotation.Autowired(required=true)
    Action:
    Consider defining a bean of type 
    'org.springframework.cloud.commons.util.InetUtilsProperties' in your 
    configuration.
    

    檢查Spring Cloud Alibaba版本是否正確 參考:版本發布說明-阿里云Spring Cloud Alibaba官網

Nacos負載均衡

Nacos?持多種負載均衡策略, 包括權重, 同機房, 同地域, 同環境等.

服務下線

當某一個節點上接口的性能較差時,我們可以第一時間對該節點進行下線,防止對服務造成一定的影響。(問ai再確認一下)

步驟:服務詳情 → 下線

點擊下線后,再次請求接?,會發現該服務沒有請求進來了,再次單擊上線, 該節點會繼續收到請求。

權重配置

權重配置,配置的是這個節點流量權重,權重大就代表流量大,權重小就代表流量小。

1.修改權重配置

操作: 詳情 → 對應節點 → 編輯 → 修改權重值

權重配置默認為1,這里測試改成 0.1

2.開啟 Nacos 負載均衡策略

由于Spring Cloud LoadBalance組件??有負載均衡配置?式, 所以不?持Nacos的權重屬性配置。

我們需要開啟Nacos的負載均衡策略, 讓權重配置?效

參考:如何解決MSE Nacos上修改服務實例的權重不生效問題_微服務引擎(MSE)-阿里云幫助中心

#開啟nacos的負載均衡策略
spring:cloud:loadbalancer:nacos:enabled: true

3.測試權重配置

啟動服務,訪問多次接?,觀察結果, 會發現9091端?號的實例接收的請求明顯?另外兩個實例少。

整體流量?效, 局部流量不是嚴格按照設置的?例進?分配的

常見問題

修改權重時, 可能會報錯:

原因:Nacos 采? raft 算法來計算 Leader, 并且會記錄前?次啟動的集群地址, 當服務器 IP 改變時

導致 raft 記錄的集群地址失效, 導致選 Leader 出現問題. (?絡環境發?變化時, IP地址也會發?變化)

解決辦法:刪除 Nacos 根?錄下 data ?件夾下的 protocol ?件夾即可。

Nacos 集群優先訪問

Nacos把同?個機房內的實例, 劃分為?個集群. 所以同集群優先訪問, 在?定程度上也可以理解為同房優先訪問.

微服務架構中, ?個服務通常有多個實例共同提供服務, 這些實例可以部署在不同的機器上, 這些機器

可以分布在不同的機房, ?如product-service:

實例1: 分布在上海機房 實例2: 分布在上海機房 實例3: 分布在北京機房 實例4: 分布在北京機房

微服務訪問時, 應盡量訪問同機房的實例. 當本機房內實例不可?時, 才訪問其他機房的實例.

?如order-service 在上海機房, product-service 在北京和上海機房都有實例, 那我們希望可以優先訪

問上海機房, 如果上海機房沒有實例, 或者實例不可?, 再訪問北京機房的實例. 通常情況下, 因為同一

個機房的機器屬于?個局域?, 局域?訪問速度更快?點.

為實例配置集群名稱

1.為product-service配置集群名稱

spring:cloud:nacos:discovery:cluster-name: SH #集群名稱: 上海集群

重啟服務, 觀察Nacos控制臺, SH集群下多了?個實例

復制product-service啟動配置, 添加VM Option

設置9091端?號的實例, 機房為BJ

-Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ

設置9092端?號的實例, 機房為BJ

-Dserver.port=9092 -Dspring.cloud.nacos.discovery.cluster-name=BJ

觀察Nacos, BJ集群下多了兩個實例

2.為order-service配置集群名稱

spring:cloud:nacos:discovery:cluster-name: SH #集群名稱: 上海集群

開啟Nacos負載均衡策略

spring:cloud:loadbalancer:nacos:enabled: true

測試

啟動服務

  1. 對接?訪問多次, 觀察?志, 會發現只有9090端?的實例收到了請求(同集群)

  2. 把9090端?的實例進?下線(SH集群), 再次訪問接?, 觀察?志, 發現9091端?和9092端?的實例收到了請求

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

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

相關文章

單片機(STM32-ADC模數轉換器)

一、基礎知識1. 模擬信號&#xff08;Analog Signal&#xff09;定義&#xff1a;模擬信號是連續變化的信號&#xff0c;可以取任意數值。特點&#xff1a;幅值和時間都是連續的&#xff0c;沒有“跳變”。舉例&#xff1a;聲音&#xff08;麥克風采集到的電壓&#xff09;溫度…

side.cpp - OpenExo

side.cpp構造函數源代碼run_side - 核心read_data()源代碼FSR壓力傳感器讀取與賦值步態事件檢測&#xff1a;落地&#xff08;ground_strike&#xff09;步態周期自適應&#xff1a;期望步長更新Toe-Off/Toe-On事件檢測與站立/擺動窗口更新步態百分比進度估算FSR閾值動態讀取&a…

基于Java+MySQL實現(Web)文件共享管理系統(仿照百度文庫)

文件共享管理系統的設計與實現摘要&#xff1a;本文件共享管理系統解決了用戶在搜索文件不需要下載文件到本地硬盤后才能查看文件的詳細內容的弊端&#xff1b;解決用戶在搜索關鍵字不明確條件下無法搜索到自己需要的文件弊端&#xff1b;解決了系統用戶并發量增加后服務器宕機…

go語言基礎教程:1. Go 下載安裝和設置

1. Go 下載安裝和設置1. 安裝Go 官網下載安裝即可&#xff0c;注意要記住安裝的位置&#xff0c;例如D:\Go cmd輸入go 或者go env 會輸出各種信息&#xff0c;代表安裝成功 2. hello go &#xff08;1&#xff09;編寫 hello.go go是以文件夾為最小單位管理程序的&#xff0c…

使用相機不同曝光時間測試燈光閃爍頻率及Ai解釋

1.背景坐地鐵上&#xff0c;撥弄著手機拍照中的專業模式&#xff0c;偶然發現拍出了條紋&#xff0c;懷疑是燈光的緣故&#xff0c;但是隨后在家里的LED等下就拍不出類似的效果了。好奇心?讓我又嘗試多了解了一點和不斷嘗試&#xff0c;發現不同的曝光時間可以拍出不同明顯程度…

力扣-416.分割等和子集

題目鏈接 416.分割等和子集 class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i 0; i < nums.length; i) {sum nums[i];}if (sum % 2 1)return false;int target sum / 2;// dp[i]表示&#xff1a;背包容量為i時&#xff0c;能裝的最大…

http協議學習-body各種類型

1、概述使用postman工具和nc命令分析http協議中body各種類型的格式。2、分析環境準備虛擬機中用nc命令模仿服務器&#xff0c;啟動監聽狀態。 windows機器安裝postmannc -k -l 192.168.202.223 80821、params參數postman中params添加倆個key為m、n&#xff1b;value為1、2&…

C++中的塔尖算法(Tarjan算法)詳解

C中的塔尖算法&#xff08;Tarjan算法&#xff09;詳解——目錄C中的塔尖算法&#xff08;Tarjan算法&#xff09;詳解一、什么是Tarjan算法&#xff1f;二、算法原理與實現步驟1. 核心概念2. 主要邏輯3. C代碼示例三、應用場景與擴展1. 典型應用2. 注意事項四、為什么選擇Tarj…

Qt 數據庫事務處理與數據安全

在 Qt 應用程序中&#xff0c;數據庫事務處理是確保數據完整性和一致性的關鍵技術。通過事務&#xff0c;可以將多個數據庫操作作為一個不可分割的單元執行&#xff0c;保證數據在并發訪問和異常情況下的安全性。本文將詳細介紹 Qt 中數據庫事務的處理方法和數據安全策略。 一、…

Redis的事務和Lua之間的區別

Redis的事務和Lua之間的區別 Redis 提供了事務和 Lua 腳本兩種實現原子性操作的方式。當需要以原子方式執行多個命令時,我們可以選擇其中一種方案。 原子性保證 兩者都確保操作的不可分割性 需要注意:不管是事務還是 Lua 腳本都不支持回滾機制 區別: 事務:某個命令失敗不會…

騰訊云SDK

SDK的用途&#xff0c;現在顯然是想更系統地了解它的產品定位和核心能力。 用戶可能是開發者或者技術決策者&#xff0c;正在評估騰訊云的開發工具鏈。從ta連續追問云服務相關技術細節的習慣看&#xff0c;應該具備相當的技術背景&#xff0c;但需要避免過度使用術語。 需要突出…

大數據集分頁優化:LIMIT OFFSET的替代方案

針對大數據集分頁場景中 LIMIT OFFSET 的性能瓶頸&#xff0c;以下是已驗證的高效替代方案及實施要點&#xff1a;?? 一、LIMIT OFFSET 的核心問題當偏移量&#xff08;OFFSET&#xff09;增大時&#xff0c;數據庫需?物理掃描并丟棄前 N 條記錄?&#xff0c;導致資源浪費和…

Linux網絡框架分析

在 Linux 內核架構中,/net 和 /drivers/net 是網絡子系統的兩個核心組成部分,它們之間的關系體現了 Linux 經典的 “抽象層分離” 設計哲學。以下是深入分析: 一、核心關系圖解 #mermaid-svg-esFw9i3LN65SYumi {font-family:"trebuchet ms",verdana,arial,sans-se…

ISIS高級特性GR

一、概述IS-IS GR是一種支持GR能力的高可靠性技術&#xff0c;可以實現數據的不間斷轉發。與我們之前介紹的OSPF的GR功能幾乎一致,但實現方法并不相同。1、GR支持GR的ISIS的設備,IIH報文中一定會攜帶TLV211(GR),TLV211包含的字段(1)RR:restart request 請求重啟,默認是3秒發送1…

電廠液壓執行器自動化升級:Modbus TCP與DeviceNet的協議貫通實踐

一、項目背景在我們電廠的汽輪機控制區&#xff0c;液壓執行器是實打實的“關鍵選手”——從調節蒸汽閥門開度到控制閘板起落&#xff0c;全靠它在高壓環境下精準動作。但這套系統一直有個“溝通障礙”&#xff1a;負責統籌控制的施耐德PLC走Modbus TCP協議&#xff0c;而液壓執…

ucharts 搭配uniapp 自定義x軸文字 實現截取顯示

formatter格式化問題因為組件不能傳遞 function&#xff0c;所有的 formatter 均需要變成別名 format 來定義&#xff0c;并在 config-ucharts.js 或 config-echarts.js 配置對應的 formatter 方法&#xff0c;組件會根據 format 的值自動替換配置文件中的 formatter 方法。uCh…

Logstash 多表增量同步 MySQL 到 Elasticsearch:支持邏輯刪除與熱加載,Docker 快速部署實戰

? 1. 項目結構 install-elk/ ├── start-elastic.sh ├── es-data/ # Elasticsearch 持久化目錄&#xff08;自動創建&#xff09; ├── logstash/├── logstash.yml├── pipeline/│ ├── user.conf│ ├── articles.conf│ …

服務器托管:網站經常被攻擊該怎么辦?

“木馬”對于孩子來說是個玩具&#xff0c;但是對于網絡行業來說是一個病毒威脅&#xff0c;站長在進行建站的過程中&#xff0c;通常都會面臨一個問題網站被掛馬&#xff0c;有些網站服務器托管在進行多次處理木馬之后得不到根治&#xff0c;后續會受到頻繁的攻擊該怎么辦&…

判斷子序列-leetcode

給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符而不改變剩余字符相對位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一個子序列&#x…

如何提高微信小程序的應用速度

1、如何提高微信小程序的應用速度&#xff1f;加載時1、上傳代碼時&#xff0c;對代碼進行壓縮。2、清理點代碼中無效的代碼和資源文件。3、減少本地代碼中圖片等資源的數量和大小。如將多個圖片合成一張圖片。還有將圖片資源放在靜態資源庫存儲。渲染1、在加載頁面時&#xff…