日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Nacos注冊中心配置用法解析

作者:流楚丶格念 更新時間: 2022-07-19 編程語言

文章目錄

  • Nacos注冊中心
    • 1.認識和安裝Nacos
    • 2.服務(wù)注冊到nacos
      • 1)引入依賴
      • 2)配置nacos地址
      • 3)重啟
    • 3.服務(wù)分級存儲模型
      • 3.1.給user-service配置集群
      • 3.2.同集群優(yōu)先的負載均衡
    • 4.權(quán)重配置
    • 5.環(huán)境隔離
      • 5.1.創(chuàng)建namespace
      • 5.2.給微服務(wù)配置namespace
    • 6.Nacos與Eureka的區(qū)別

Nacos注冊中心

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

Nacos YYDS!
在這里插入圖片描述

1.認識和安裝Nacos

Nacos是阿里巴巴的產(chǎn)品,現(xiàn)在是SpringCloud中的一個組件。相比Eureka功能更加豐富,在國內(nèi)受歡迎程度較高。

在這里插入圖片描述

安裝方式可以參考我整理的另兩篇博客:
Windows安裝Nacos、docker安裝Nacos

2.服務(wù)注冊到nacos

Nacos是SpringCloudAlibaba的組件,而SpringCloudAlibaba也遵循SpringCloud中定義的服務(wù)注冊、服務(wù)發(fā)現(xiàn)規(guī)范。因此使用Nacos和使用Eureka對于微服務(wù)來說,并沒有太大區(qū)別。

主要差異在于:

  • 依賴不同
  • 服務(wù)地址不同

1)引入依賴

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

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

然后在微服務(wù)子模塊中的pom文件中引入nacos-discovery依賴:

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

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

2)配置nacos地址

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

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

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

3)重啟

重啟微服務(wù)后,登錄nacos管理頁面,可以看到微服務(wù)信息:

在這里插入圖片描述

3.服務(wù)分級存儲模型

一個服務(wù)可以有多個實例,例如我們的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就將同一機房內(nèi)的實例 劃分為一個集群

也就是說,user-service是服務(wù),一個服務(wù)可以包含多個集群,如杭州、上海,每個集群下可以有多個實例,形成分級模型,如圖:
在這里插入圖片描述

微服務(wù)互相訪問時,應(yīng)該盡可能訪問同集群實例,因為本地訪問速度更快。當本集群內(nèi)不可用時,才訪問其它集群。例如:

在這里插入圖片描述

杭州機房內(nèi)的order-service應(yīng)該優(yōu)先訪問同機房的user-service。

3.1.給user-service配置集群

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

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

重啟兩個user-service實例后,我們可以在nacos控制臺看到下面結(jié)果:

在這里插入圖片描述
在這里插入圖片描述

我們再次復制一個user-service啟動配置,添加屬性:

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

配置如圖所示:

在這里插入圖片描述

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

在這里插入圖片描述

3.2.同集群優(yōu)先的負載均衡

默認的ZoneAvoidanceRule并不能實現(xiàn)根據(jù)同集群優(yōu)先來實現(xiàn)負載均衡。

因此Nacos中提供了一個NacosRule的實現(xiàn),可以優(yōu)先從同集群中挑選實例。

1)給order-service配置集群信息

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

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

2)修改負載均衡規(guī)則

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

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

重啟應(yīng)用我們再訪問一下請求,多訪問幾次,我們發(fā)現(xiàn),HZ集群的都優(yōu)先被訪問了,SH集群的沒被訪問
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

4.權(quán)重配置

實際部署中會出現(xiàn)這樣的場景:

服務(wù)器設(shè)備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。

但默認情況下NacosRule是同集群內(nèi)隨機挑選,不會考慮機器的性能問題。

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

在nacos控制臺,找到user-service的實例列表,點擊編輯,即可修改權(quán)重:

在彈出的編輯窗口,修改權(quán)重:

在這里插入圖片描述
在這里插入圖片描述
我們再訪問個十次:
在這里插入圖片描述
權(quán)重為1的就被訪問了一次

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

5.環(huán)境隔離

Nacos提供了namespace來實現(xiàn)環(huán)境隔離功能。

  • nacos中可以有多個namespace
  • namespace下可以有g(shù)roup、service等
  • 不同namespace之間相互隔離,例如不同namespace的服務(wù)互相不可見

在這里插入圖片描述

5.1.創(chuàng)建namespace

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

我們可以點擊頁面新增按鈕,添加一個namespace:
在這里插入圖片描述

然后,填寫表單:

在這里插入圖片描述

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

5.2.給微服務(wù)配置namespace

給微服務(wù)配置namespace只能通過修改配置來實現(xiàn)。

例如,修改order-service的application.yml文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 5794e19f-3d80-4f54-b263-8b19c2ed27e4 # 命名空間,填I(lǐng)D

重啟order-service后,訪問控制臺,可以看到下面的結(jié)果:

在這里插入圖片描述

此時訪問order-service,因為namespace不同,會導致找不到userservice,控制臺會報錯,找到不userservice+:在這里插入圖片描述

6.Nacos與Eureka的區(qū)別

Nacos的服務(wù)實例分為兩種類型:

  • 臨時實例(撿來的):如果實例宕機超過一定時間,會從服務(wù)列表剔除,默認的類型。

  • 非臨時實例(親兒子):如果實例宕機,不會從服務(wù)列表剔除,也可以叫永久實例。

配置一個服務(wù)實例為永久實例:

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

Nacos和Eureka整體結(jié)構(gòu)類似,服務(wù)注冊、服務(wù)拉取、心跳等待,但是也存在一些差異:

我們先回顧一下Eureka的整體結(jié)構(gòu):
在這里插入圖片描述
在對比一下Nacos 的:

  • Nacos 的消費者會定時拉取服務(wù),以避免原來的服務(wù)提供者宕機

  • Nacos 對于服務(wù)提供者:

    • 如果是非臨時實例(親兒子),那么注冊中心自己會采用主動監(jiān)測模式定時自動詢問服務(wù)提供者是否健康
    • 如果是臨時實例(撿來的),那么就是服務(wù)提供者主動向注冊中心發(fā)送心跳檢測
      在這里插入圖片描述
  • Nacos與eureka的共同點

    • 都支持服務(wù)注冊和服務(wù)拉取
    • 都支持服務(wù)提供者心跳方式做健康檢測
  • Nacos與Eureka的區(qū)別

    • Nacos支持服務(wù)端主動檢測提供者狀態(tài):臨時實例采用心跳模式,非臨時實例采用主動檢測模式
    • 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
    • Nacos支持服務(wù)列表變更的消息推送模式,服務(wù)列表更新更及時
    • Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式

原文鏈接:https://blog.csdn.net/weixin_45525272/article/details/125851371

欄目分類
最近更新