前置文章:
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
- 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壓縮包至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壓縮包至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
- 3、Nacos控制頁面
Nacos Console: http://192.168.2.105:8848/nacos/index.html
Nacos控制頁面——默認(rèn)賬戶:nacos阁簸,默認(rèn)密碼:nacos
二、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服務(wù)集群&負(fù)載均衡
- 1拖陆、集群模擬
集群模擬與Eureka集群模擬一樣弛槐,通過IDEA的copy configuration來配置server.port來配置不同端口的服務(wù)即可。
- 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
②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ù)双妨。
- 2淮阐、命名空間
①數(shù)據(jù)模型
可以先看下Nacos數(shù)據(jù)模型,如下:
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暑劝。
③服務(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)被刪除)。
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)容锐墙,感謝閱讀。