1. 安裝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方式