微服務(四)nacos服務注冊


1. 安裝nacos

nacos官網

2. 服務注冊到nacos

2.1 依賴

在父工程中的<dependencyManagement>加入依賴

            <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>

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

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

注意:需要下面兩個依賴才可以成功注冊

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

2.2 修改yml配置文件

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

2.3 啟動服務

3 Nacos服務分級存儲模型

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

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

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

2.3.1 給user-service配置集群

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

重新復制個user-service服務

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

2.3.2 同集群優先的負載均衡

默認的ZoneAvoidanceRule並不能實現根據同集群優先來實現負載均衡。

因此Nacos中提供了一個NacosRule的實現,可以優先從同集群中挑選實例。

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

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

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

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule 

3. 權重配置

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

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

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

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

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

4. 環境隔離

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

4.1 創建namespace

4.2 該配置

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填ID

5 Nacos與Eureka的區別

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

  • Nacos與eureka的共同點

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM