Spring Cloud-Nacos服務(wù)注冊(cè)&發(fā)現(xiàn)

前置文章:
Spring Cloud-Erueka服務(wù)注冊(cè)

零院喜、本文綱要

  • 一、安裝Nacos
  • 二晕翠、Nacos服務(wù)注冊(cè)&發(fā)現(xiàn)
  • 三喷舀、Nacos服務(wù)集群&負(fù)載均衡
  • 四、Nacos服務(wù)權(quán)重&命名空間
  • 五淋肾、Nacos服務(wù)實(shí)例
  • 六硫麻、對(duì)比Nacos和Eureka

tips:Ctrl + F快速定位所需內(nèi)容進(jìn)行閱讀吧。

一樊卓、安裝Nacos

Nacos 快速開始

  • 1拿愧、Linux系統(tǒng)安裝Nacos

1.1 Java環(huán)境準(zhǔn)備

①下載JDK:Java Archive Downloads - Java SE 8 (oracle.com),根據(jù)自己的Linux系統(tǒng)實(shí)際位數(shù)下載對(duì)應(yīng)壓縮包即可简识。

下載JDK壓縮包.png

②上傳JDK壓縮包至Linux系統(tǒng)赶掖,比如:/usr/local/。
③然后解壓:tar -xvf jdk-8u202-linux-x64.tar.gz七扰,重命名解壓后目錄文件夾名為java

# 如需復(fù)制命令奢赂,請(qǐng)復(fù)制此處:
tar -xvf jdk-8u202-linux-x64.tar.gz
mv jdk-8u202-linux-x64 java

④配置環(huán)境變量
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

# 如需復(fù)制命令,請(qǐng)復(fù)制此處:
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

⑤設(shè)置環(huán)境變量:

source /etc/profile

1.2 安裝Nacos

①下載Nacos
https://github.com/alibaba/nacos/releases

下載Nacos壓縮包.png

②上傳Nacos壓縮包至Linux系統(tǒng)颈走,比如:/usr/local/src/膳灶。
③解壓&刪除壓縮包

tar -xvf nacos-server-1.4.1.tar.gz
rm -rf nacos-server-1.4.1.tar.gz

④啟動(dòng)Nacos
進(jìn)入bin目錄,啟動(dòng)Nacos(standalone代表著單機(jī)模式運(yùn)行立由,非集群模式):

sh startup.sh -m standalone
  • 2痹愚、Windows系統(tǒng)安裝Nacos

①下載Nacos壓縮包
②解壓Nacos壓縮包
③啟動(dòng)Nacos
進(jìn)入bin目錄法梯,啟動(dòng)Nacos(standalone代表著單機(jī)模式運(yùn)行,非集群模式):

startup.cmd -m standalone
image.png

二、Nacos服務(wù)注冊(cè)&發(fā)現(xiàn)

  • 1因苹、服務(wù)模塊搭建
    1.1 spring_cloud_orderservice模塊:
    ①mapper-[I接口]OrderMapper
    ②pojo-[C類]Order
    ③service-[I接口]OrderService-[C類]OrderServiceImpl
    ④web-[C類]OrderController
    ⑤啟動(dòng)類-[C類]SpringCloudOrderserviceApplication
    1.2 spring_cloud_userservice模塊:
    ①mapper-[I接口]UserMapper
    ②pojo-[C類]User
    ③service-[I接口]UserService-[C類]UserServiceImpl
    ④web-[C類]UserController
    ⑤啟動(dòng)類-[C類]SpringCloudUserserviceApplication
  • 2移国、pom.xml配置相關(guān)依賴

頂級(jí)父模塊配置依賴管理,添加spring-cloud-alibaba-dependencies相關(guān)依賴荷逞。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

各個(gè)服務(wù)添加nacos相關(guān)依賴媒咳,spring-cloud-starter-alibaba-nacos-discovery。

        <!-- nacos客戶端依賴包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
  • 3种远、application.yml配置nacos服務(wù)

配置order服務(wù)和user服務(wù)的application.yml文件涩澡,添加nacos服務(wù)的相關(guān)配置。其他關(guān)于server-port坠敷、datasource妙同、application-name射富、mybatis、logging的配置與之前Eureka的內(nèi)容一致渐溶。

# server-port
server:
  port: 8081
# datasource
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
# application name
  application:
    name: userservice
# nacos server
  cloud:
    nacos:
      server-addr:  127.0.0.1:8848 #nacos server address
# mybatis
mybatis:
  type-aliases-package: com.stone.pojo
  configuration:
    map-underscore-to-camel-case: true
# logging
logging:
  level:
    com.stone: debug
  pattern:
    dateformat: yyyy-MM-dd HH:mm:ss:SSS

所以辉浦,此處我們只需將eureka-server的內(nèi)容替換成nacos-server的配置即可。

  • 4茎辐、啟動(dòng)服務(wù)模塊

此時(shí)我們就可以通過Nacos控制臺(tái)來查看我們啟動(dòng)的服務(wù)宪郊,如下:

通過Nacos控制臺(tái)查看服務(wù).png

三、Nacos服務(wù)集群&負(fù)載均衡

  • 1拖陆、集群模擬

集群模擬與Eureka集群模擬一樣弛槐,通過IDEA的copy configuration來配置server.port來配置不同端口的服務(wù)即可。

user服務(wù)集群.png
  • 2依啰、服務(wù)分級(jí)存儲(chǔ)

①user服務(wù)配置集群
通過配置服務(wù)集群乎串,來給服務(wù)進(jìn)行分級(jí)存儲(chǔ)。
Ⅰ 模擬上海(ShangHai)地區(qū)配置集群:

spring:
  cloud:
    nacos:
      # server address
      server-addr:  127.0.0.1:8848
      discovery:
        # cluster
        cluster-name: ShangHai 

Ⅱ 模擬杭州(HangZhou)地區(qū)配置集群:

spring:
  cloud:
    nacos:
      server-addr:  127.0.0.1:8848
      discovery:
        cluster-name: HangZhou
杭州&上海服務(wù)集群.png

②order服務(wù)配置負(fù)載均衡策略
NacosRule負(fù)載均衡策略:
Ⅰ 優(yōu)先選擇本地:優(yōu)先選擇配置指定的集群速警,如果指定集群未有有效可使用的服務(wù)叹誉,則使用其他集群可用服務(wù)。
Ⅱ 本地內(nèi)隨機(jī)闷旧。

# user-service ribbon rule
userservice:
  ribbon:
    # 優(yōu)先選擇本地长豁,在本地內(nèi)隨機(jī)
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

③order服務(wù)配置服務(wù)發(fā)現(xiàn)集群

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        cluster-name: HangZhou

此時(shí)如果發(fā)生了跨集群的調(diào)用,日志內(nèi)會(huì)有相應(yīng)記錄:A cross-cluster call occurs忙灼。

2022-03-06 16:20:15:571  WARN 36360 --- [nio-8082-exec-6] c.alibaba.cloud.nacos.ribbon.NacosRule   : A cross-cluster call occurs匠襟,name = userservice, clusterName = HZ, instance = [Instance{instanceId='192.168.2.105#8084#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8084, weight=0.1, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}, Instance{instanceId='192.168.2.105#8081#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8081, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}, Instance{instanceId='192.168.2.105#8083#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8083, weight=0.1, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}]

四、Nacos服務(wù)權(quán)重&命名空間

  • 1该园、服務(wù)權(quán)重

服務(wù)權(quán)重一般配置在0-1之間酸舍,0表示無權(quán)重,則默認(rèn)不會(huì)調(diào)用該服務(wù)里初;
使用場景:服務(wù)升級(jí)啃勉,將集群中某部分服務(wù)權(quán)重先調(diào)整為0,而后停用重啟新服務(wù)双妨。

服務(wù)權(quán)重配置.png
  • 2淮阐、命名空間

①數(shù)據(jù)模型
可以先看下Nacos數(shù)據(jù)模型,如下:

Nacos數(shù)據(jù)模型.png

Nacos 數(shù)據(jù)模型 Key 由三元組唯一確定, Namespace默認(rèn)是空串斥难,公共命名空間(public)枝嘶,分組默認(rèn)是 DEFAULT_GROUP帘饶。
實(shí)際開發(fā)中哑诊,Namespace可能根據(jù)開發(fā)、測試及刻、生產(chǎn)做不同劃分镀裤,服務(wù)不可以跨Namespace進(jìn)行調(diào)用竞阐。
②命名空間設(shè)置
命名空間ID可以不做設(shè)置,系統(tǒng)會(huì)默認(rèn)生成UUID暑劝。

命名空間設(shè)置.png

③服務(wù)模塊配置指定命名空間
namespace的配置使用命名空間ID即可骆莹,不能填寫自己的命名空間名(如:dev)。

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        cluster-name: HZ
        namespace: 15740536-b11b-4e42-9f85-31686f5fb8c6

五担猛、Nacos服務(wù)實(shí)例

Nacos一般我們僅需配置臨時(shí)實(shí)例即可幕垦,以下做下了解。

  • 1傅联、臨時(shí)實(shí)例
    通過心跳監(jiān)測先改,如果服務(wù)宕機(jī)不可用,則會(huì)被Nacos注冊(cè)中心從服務(wù)列表中剔除蒸走;
  • 2仇奶、非臨時(shí)實(shí)例
    Nacos注冊(cè)中心會(huì)主動(dòng)詢問,如果服務(wù)宕機(jī)不可用比驻,不會(huì)被剔除(會(huì)等待直至服務(wù)恢復(fù)正常该溯,或者手動(dòng)被刪除)。
image.png

application.yml中配置ephemeral屬性别惦,來控制臨時(shí)/非臨時(shí)實(shí)例狈茉,如下:

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        cluster-name: HZ
        namespace: 15740536-b11b-4e42-9f85-31686f5fb8c6
        ephemeral: false #默認(rèn)為true,即為臨時(shí)實(shí)例

六步咪、對(duì)比Nacos和Eureka

  • 1论皆、共同點(diǎn)
    ①都支持 服務(wù)注冊(cè) & 服務(wù)拉取
    ②都支持 服務(wù)提供者 心跳方式健康檢測
  • 2、不同點(diǎn)
    ①Nacos支持服務(wù)端主動(dòng)檢測提供者狀態(tài):臨時(shí)實(shí)例-心跳方式猾漫、非臨時(shí)實(shí)例-主動(dòng)檢測点晴;
    ②Nacos臨時(shí)實(shí)例-異常剔除、非臨時(shí)實(shí)例-不主動(dòng)剔除悯周;
    ③Nacos支持服務(wù)列表變更推送粒督,服務(wù)列表及時(shí)更新;
    ④Nacos集群默認(rèn)采用AP模式禽翼,存在非臨時(shí)實(shí)例采用CP模式屠橄、
    Eureka采用AP模式。

七闰挡、結(jié)尾

以上即為服務(wù)注冊(cè)和發(fā)現(xiàn)的基礎(chǔ)內(nèi)容锐墙,感謝閱讀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末长酗,一起剝皮案震驚了整個(gè)濱河市溪北,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖之拨,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茉继,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚀乔,警方通過查閱死者的電腦和手機(jī)烁竭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吉挣,“玉大人派撕,你說我怎么就攤上這事〔腔辏” “怎么了腥刹?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汉买。 經(jīng)常有香客問我衔峰,道長,這世上最難降的妖魔是什么蛙粘? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任垫卤,我火速辦了婚禮,結(jié)果婚禮上出牧,老公的妹妹穿的比我還像新娘穴肘。我一直安慰自己,他們只是感情好舔痕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布评抚。 她就那樣靜靜地躺著,像睡著了一般伯复。 火紅的嫁衣襯著肌膚如雪慨代。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天啸如,我揣著相機(jī)與錄音侍匙,去河邊找鬼。 笑死叮雳,一個(gè)胖子當(dāng)著我的面吹牛想暗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帘不,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼说莫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寞焙?” 一聲冷哼從身側(cè)響起储狭,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤告唆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晶密,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡模她,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年稻艰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侈净。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尊勿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畜侦,到底是詐尸還是另有隱情元扔,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布旋膳,位于F島的核電站澎语,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏验懊。R本人自食惡果不足惜擅羞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望义图。 院中可真熱鬧减俏,春花似錦、人聲如沸碱工。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怕篷。三九已至历筝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廊谓,已是汗流浹背漫谷。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹂析,地道東北人舔示。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像电抚,于是被迫代替她去往敵國和親惕稻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容