詳解Nacos注冊中心的使用

文章目錄

  • 1、安裝
  • 2、服務注冊
    • 2.1、引入依賴
    • 2.2、配置nacos地址
    • 2.3、重啟
  • 3、服務分級存儲模型
    • 3.1、給user-service配置集群
    • 3.2、同集群優先的負載均衡
  • 4、權重配置
  • 5、環境隔離
    • 5.1、創建namespace
    • 5.2、配置namespace
  • 6、Nacos與Eureka的區別
  • 7、代碼免費分享

?🍃作者介紹:雙非本科大三網絡工程專業在讀,阿里云專家博主,專注于Java領域學習,擅長web應用開發、數據結構和算法,初步涉獵Python人工智能開發和前端開發。
🦅主頁:@逐夢蒼穹
📕所屬專欄:微服務
? 您的一鍵三連,是我創作的最大動力🌹

1、安裝

國內公司一般都推崇阿里巴巴的技術,比如注冊中心,SpringCloudAlibaba也推出了一個名為Nacos的注冊中心。

Nacos是阿里巴巴的產品,現在是SpringCloud中的一個組件。
相比Eureka功能更加豐富,在國內受歡迎程度較高。
image.png
安裝方式可以參考這篇文章:https://blog.csdn.net/qq_60735796/article/details/136432153

2、服務注冊

Nacos是SpringCloudAlibaba的組件,而SpringCloudAlibaba也遵循SpringCloud中定義的服務注冊、服務發現規范。因此使用Nacos和使用Eureka對于微服務來說,并沒有太大區別。

主要差異在于:

  • 依賴不同
  • 服務地址不同

2.1、引入依賴

在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依賴:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

然后在user-service和order-service中的pom文件中引入nacos-discovery依賴:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

注意:不要忘了注釋掉eureka的依賴。

2.2、配置nacos地址

在user-service和order-service的application.yml中添加nacos地址:

spring:cloud:nacos:server-addr: localhost:8848

注意:不要忘了注釋掉eureka的地址

2.3、重啟

重啟微服務后,登錄nacos管理頁面,可以看到微服務信息:
image.png

3、服務分級存儲模型

一個服務可以有多個實例,例如我們的user-service,可以有:

  • 127.0.0.1:8081
  • 127.0.0.1:8082
  • 127.0.0.1:8083

假如這些實例分布于全國各地的不同機房,例如:

  • 127.0.0.1:8081,在上海機房
  • 127.0.0.1:8082,在上海機房
  • 127.0.0.1:8083,在杭州機房

Nacos就將同一機房內的實例 劃分為一個集群

也就是說,user-service是服務,一個服務可以包含多個集群,如杭州、上海,每個集群下可以有多個實例,形成分級模型,如圖:


微服務互相訪問時,應該盡可能訪問同集群實例,因為本地訪問速度更快。當本集群內不可用時,才訪問其它集群。例如:

杭州機房內的order-service應該優先訪問同機房的user-service。

3.1、給user-service配置集群

修改user-service的application.yml文件,添加集群配置:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HangZhou # 集群名稱 杭州

重啟兩個user-service實例后,我們可以在nacos控制臺看到下面結果:
image.png
我們再次復制一個user-service啟動配置,添加屬性:

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=Shanghai

啟動UserApplication3后再次查看nacos控制臺:
image.png

3.2、同集群優先的負載均衡

默認的ZoneAvoidanceRule并不能實現根據同集群優先來實現負載均衡。
因此Nacos中提供了一個NacosRule的實現,可以優先從同集群中挑選實例。

1)給order-service配置集群信息
修改order-service的application.yml文件,添加集群配置:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HangZhou # 集群名稱

2)修改負載均衡規則
修改order-service的application.yml文件,修改負載均衡規則:

userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規則

4、權重配置

實際部署中會出現這樣的場景:

服務器設備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。
但默認情況下NacosRule是同集群內隨機挑選,不會考慮機器的性能問題。

因此,Nacos提供了權重配置來控制訪問頻率,權重越大則訪問頻率越高。

在nacos控制臺,找到user-service的實例列表,點擊編輯,即可修改權重:
image.png

在彈出的編輯窗口,修改權重:

注意:如果權重修改為0,則該實例永遠不會被訪問

5、環境隔離

Nacos提供了namespace來實現環境隔離功能。

  • nacos中可以有多個namespace
  • namespace下可以有group、service等
  • 不同namespace之間相互隔離,例如不同namespace的服務互相不可見

5.1、創建namespace

默認情況下,所有service、data、group都在同一個namespace,名為public:

我們可以點擊頁面新增按鈕,添加一個namespace:

然后,填寫表單:

就能在頁面看到一個新的namespace:
image.png

5.2、配置namespace

給微服務配置namespace只能通過修改配置來實現。
例如,修改order-service的application.yml文件:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: e4ac0b0b-cba2-445e-9af8-008c84bf22fd # 命名空間,填ID

重啟order-service后,訪問控制臺,可以看到下面的結果:
image.png
image.png
此時訪問order-service,因為namespace不同,會導致找不到userservice,控制臺會報錯:
image.png
簡單來說就是沒有可用的實例

6、Nacos與Eureka的區別

Nacos的服務實例分為兩種類型:

  • 臨時實例:如果實例宕機超過一定時間,會從服務列表剔除,默認的類型。
  • 非臨時實例:如果實例宕機,不會從服務列表剔除,也可以叫永久實例。

配置一個服務實例為永久實例:

spring:cloud:nacos:discovery:ephemeral: false # 設置為非臨時實例

Nacos和Eureka整體結構類似,服務注冊、服務拉取、心跳等待,但是也存在一些差異:

  • Nacos與eureka的共同點
    • 都支持服務注冊和服務拉取
    • 都支持服務提供者心跳方式做健康檢測
  • Nacos與Eureka的區別
    • Nacos支持服務端主動檢測提供者狀態:臨時實例采用心跳模式,非臨時實例采用主動檢測模式
    • 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
    • Nacos支持服務列表變更的消息推送模式,服務列表更新更及時
    • Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式

7、代碼免費分享

百度網盤鏈接:

鏈接:https://pan.baidu.com/s/1D6lz27AZYgBKFD8W5OdJ-w?pwd=1234
提取碼:1234

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

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

相關文章

首例以“冠狀病毒”為主題的勒索病毒,篡改系統MBR

前言概述 2020年勒索病毒攻擊仍然是網絡安全的最大威脅&#xff0c;在短短三個月的時間里&#xff0c;已經出現了多款新型的勒索病毒&#xff0c;關于2020年勒索病毒攻擊新趨勢&#xff0c;可以閱讀筆者寫的上一篇文章&#xff0c;里面有詳細的分析&#xff0c;從目前觀察到的…

Linux 學習筆記(9)

九、 運行級別 1 、 Linux 系統的運行級別 (runlevel) Linux 系統有 7 個運行級別&#xff0c; Linux 系統任何時候都運行在一個指定的運行級別上&#xff0c;不同的運行級 別所運行的程序和服務不盡相同&#xff0c;所要完成的工作和要達到的目的也不相同 運行級別…

RH850P1X芯片學習筆記-Generic Timer Module -ATOM

文章目錄 ARU-connected Timer Output Module (ATOM)OverviewGLOBAL CHANNEL CONTROL BLOCK ATOM Channel architectureATOM Channel modesSOMP-Signal Output Mode PWMSOMP - ARUSOMC-Signal Output Mode CompareSOMC - ARUSOMC – COMPARE COMMANDSOMC – OUTPUT ACTIONATOM …

Python縮進規則

Python的縮進規則是Python語法中非常重要的一部分&#xff0c;也是Python語言獨特的特點之一。在Python中&#xff0c;縮進被用來表示代碼塊的層次結構&#xff0c;而不是像其他語言一樣使用大括號或關鍵詞。這種縮進規則使得Python代碼更加簡潔、易讀、易于理解&#xff0c;同…

python模塊百科_操作系統接口_os【一】

python模塊百科_操作系統接口_os【一】 os --- 多種操作系統接口一、相關模塊1.1 os.path 文件路徑1.2 fileinput 文件讀取1.3 tempfile 臨時文件和目錄1.4 shutil 高級文件和目錄1.5 platform 操作系統底層模塊 二、關于函數適用性的說明2.1 與操作系統相同的接口2.2 支持字節…

Git版本管理常用指令

Git常用命令 一、基本指令二、本地倉庫管理三、遠程倉庫管理四、分支管理五、儲藏區六、標簽管理一、基本指令 查看Git安裝版本:git --version 查看log指令的幫助信息:git log --help 配置Git用戶名:git config --global user.name “xxxxx” 配置Git郵箱: git config --…

2024年騰訊云新用戶優惠券領取入口及使用教程

隨著云計算技術的不斷發展和普及&#xff0c;越來越多的個人和企業選擇使用云服務。騰訊云作為國內領先的云服務提供商&#xff0c;為了吸引新用戶&#xff0c;經常推出各種優惠活動&#xff0c;其中就包括新用戶專屬優惠券&#xff0c;本文將為大家分享騰訊云新用戶優惠券的領…

5個好玩神奇還免費的工具網站收藏不后悔-搜嗖工具箱

生命倒計時 http://www.thismuchlonger.com 這是一個相哇塞的網站&#xff0c;可以讓我們靜下心來好好想想我們來這個世界究竟為了什么&#xff0c;因為當我們作為命運的主宰者。敲打鍵盤設定好自己一生長度的時候&#xff0c;我們的剩余壽命已經成絕對值&#xff0c;一旦生命…

創建型模式之原型模式

一、概述 1、工作原理&#xff1a;將一個原型對象傳給要發動創建的對象(即客戶端對象),這個要發動創建的對象通過請求原型對象復制自己來實現創建過程 2、通過克隆方法所創建的對象是全新的對象&#xff0c;它們在內存中擁有新的地址&#xff0c;每一個克隆對象都是獨立的 3…

MySQL 中的 varchar 和 char 有什么區別?MySQL中 in 和 exists 區別?

MySQL 中的 varchar 和 char 有什么區別&#xff1f; char 是一個定長字段,假如申請了char(10)的空間,那么無論實際存儲多少內容.該字段都占用 10 個字符,而 varchar 是變長的,也就是說申請的只是最大長度,占用的空間為實際字符長度1,最后一個字符存儲使用了多長的空間. 在檢索…

李沐動手學習深度學習——3.6練習

本節直接實現了基于數學定義softmax運算的softmax函數。這可能會導致什么問題&#xff1f;提示&#xff1a;嘗試計算exp(50)的大小。 可能存在超過計算機最大64位的存儲&#xff0c;導致精度溢出&#xff0c;影響最終計算結果。 本節中的函數cross_entropy是根據交叉熵損失函數…

JavaScript之數據類型

系列文章目錄 文章目錄 系列文章目錄前言 前言 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站&#xff0c;這篇文章男女通用&#xff0c;看懂了就去分享給你的碼吧。 數據類型   Java…

20.圖

圖的基本概念 1.圖的定義 由頂點和邊組成的集合&#xff0c;G(V,E) 2.基本概念 鄰接點&#xff1a; 對于無向圖u v來說&#xff0c;uv互為鄰接點 對于有向圖u->v來說&#xff0c;v是u的鄰接點&#xff0c;但u不是v的臨界點 路徑&#xff1a; 一個頂點到另一個頂點所經過的…

從Poincare猜想看中國數學的國際地位

2006年丘成桐學派利用北京晨興數學中心&#xff0c;宣布一名俄國學者Poincare猜想研究中存在錯誤&#xff0c;已經由華裔學者朱熹平和曹懷東糾正過來&#xff0c;但數年以后我發現作為千禧七問題之一的Poincazre猜想&#xff0c;英國克萊數學所還是把1百萬美元獎金送給俄國人。…

藍橋杯:卡片

題目 小藍有很多數字卡片&#xff0c;每張卡片上都是數字0 到9。 小藍準備用這些卡片來拼一些數&#xff0c;他想從1 開始拼出正整數&#xff0c;每拼一個&#xff0c;就保存起來&#xff0c;卡片就不能用來拼其它數了。 小藍想知道自己能從1 拼到多少。 例如&#xff0c;當小…

動態規劃-最長公共子串(c)

動態規劃 動態規劃&#xff08;dynamic programming&#xff09;是一種算法設計方法。基本思想是在對一個問題的多階段決策中&#xff0c;按照某一順序&#xff0c;根據每一步所選決策的不同&#xff0c;會引起狀態的轉移&#xff0c;最后會在變化的狀態中獲取到一個決策序列。…

vs code更新后json文件無法識別通配符 ,編譯多文件失敗的解決辦法

問題描述 在Mac或者LInux上&#xff0c;進行C/C相同路徑下進行多文件編譯時&#xff0c;之前設置好的json文件突然不能解釋通配符&#xff0c;并且將帶有單引號的地址傳給clang&#xff0c;由于*.c被擴在單引號中&#xff0c;clang找不到文件導致失敗。 如果將命令端中的指令復…

云服務器無法Ping通解決

問題: 使用公網IP地址PING云服務器,無法PING通 但是可SSH到服務器,表示通信鏈路是正常的,可能是端口或路徑規則未開放導致 登陸云服務器后臺,進行安全組規則查看,發現ICMP沒有放行 添加允許ICMP連接規則 成功PING通云服務器

LeetCode——二叉樹(Java)

二叉樹 簡介[簡單] 144. 二叉樹的前序遍歷、94. 二叉樹的中序遍歷、145. 二叉樹的后序遍歷二叉樹層序遍歷[中等] 102. 二叉樹的層序遍歷[中等] 107. 二叉樹的層序遍歷 II[中等] 199. 二叉樹的右視圖[簡單] 637. 二叉樹的層平均值[中等] 429. N 叉樹的層序遍歷[中等] 515. 在每個…

Java接口

接口的定義 抽象方法的集合&#xff0c;接口通常以interface來聲明。一個類通過繼承接口的方式&#xff0c;從而來繼承接口的抽象方法。 接口并不是類&#xff0c;編寫接口的方式和類很相似&#xff0c;但是他們屬于不同的概念。類描述的是對象的屬性和方法。接口則包含類要實…