Nacos注冊中心
服務注冊到Nacos
Nacos
是SpringCloudAlibaba的組件也遵循SpringCloud中定義的服務注冊和服務發現規范,因此使用Nacos與使用Eureka對于微服務來說并沒有太大區別
- 主要差異就是依賴不同,服務地址不同
第一步: 在父工程cloud-demo模塊
的pom.xml文件中引入SpringCloudAlibaba的管理依賴spring-cloud-alibaba-dependencies
<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的客戶端依賴spring-cloud-starter-alibaba-nacos-discovery
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
第三步: 在user-service和order-service模塊
的application.yml文件中配置注冊的服務名稱和Nacos地址(默認就是localhost:8848)
- 注冊的服務實例默認會被分配到public的命名空間,分組名稱是DEFAULT_GROUPE,也可以添加
discovery.namespace和group
配置手動指定命名空間和分組
spring:application: name: userservice/orderservic # 注冊的服務名稱cloud:nacos:server-addr: localhost:8848 # nacos服務地址discovery:namespace: xxx # 通過命名空間ID或名稱指定注冊服務實例所在的命名空間group: xxx # 通過分組名指定注冊服務實例所在的分組
第四步: 重啟user-service和order-service服務
,登錄Nacos的管理頁面在服務列表
中查看所有注冊的微服務信息
分級存儲模型(集群/實例)
一個服務可以創建多個實例
, 這些實例可能分布于全國各地的不同機房,Nacos會將這些在同一個機房的實例劃分為一個集群(包含不同服務的實例)
- 一個微服務可以包含多個集群,每個集群下有多個實例,形成分級存儲模型(一級是微服務, 二級是集群, 三級是實例)
- 因為跨集群調用服務延遲較高, 所以微服務相互調用時應該盡可能先訪問本地集群的服務(本地訪問速度快),當本地集群不可訪問時再去訪問其他集群
第一步: 在user-service模塊
的配置文件中添加集群配置屬性spring.cloud.nacos.discovery.cluster-name
并重新啟動該服務的8080/8081
兩個實例
spring:application: name: user-service # 服務名稱cloud:nacos:server-addr: localhost:8848 # nacos服務地址discovery:cluster-name: HZ # 集群名稱(杭州)
第二步: 使用IDEA創建一個userservice服務的實例(端口號設為8083)
, 修改user-service模塊
的配置文件并將集群名稱設為上海,然后啟動該服務的8083實例
- 一個配置文件可以編輯多次,每次修改完配置文件后只會對下次要啟動的實例生效,不會對啟動的實例生效
spring:application: name: user-service # 服務名稱cloud:nacos:server-addr: localhost:8848 # nacos服務地址discovery:cluster-name: SH # 集群名稱(上海)
第三步: 在Nacos控制臺查看注冊的微服務的集群及其實例個數
環境隔離
環境級別
實際開發中在不同的環境下需要使用不同的配置,如開發環境(dev),測試環境(test),生產環境(prod)
- 我們啟動項目時傳入
spring.profiles.active
屬性的參數值dev/test/prod
決定引用哪個環境的配置文件
Nacos既是一個注冊中心同時也是一個數據中心,為了做數據和服務的管理另外提供了命名空間(ID唯一)
來對不同環境的服務進行隔離
- Nacos中可以有多個命名空間,每個
namespace
下可以有多個Group
,每個groupe下又有多個服務實例
,不同環境下的服務實例互相不可見即無法訪問
右鍵Edit Configuration...
修改Active.profiles屬性值
可以快速更改服務實例啟動時的環境,不用再修改配置文件
配置環境隔離
第一步: 創建新的命名空間,點擊命名空間 ->新建命名空間 ->填寫表單(設置命名空間名和描述,命名空間的ID可以自動生成)
第二步: 在order-service模塊
的application.yml文件中添加spring.cloud.nacos.discovery.namespace屬性
配置服務實例所屬的命名空間
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: ea980a8c-c886-4a2c-8653-d29c62d518bb # 通過ID指定服務實例所屬的命名空間namespace: dev # 通過名稱指定服務實例所屬的命名空間
第三步: 重啟order-service服務實例
,訪問http://localhost:8080/order/101則會報找不到可用實例的異常
,因為在dev命名空間下沒有userservice服務