Spring Cloud alibaba Nacos
Spring Cloud alibaba Nacos
1.Spring Cloud alibaba
地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md
引入依賴:
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.7.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.Spring Cloud alibaba Nacos 註冊中心
(1)下載Nacos Server
地址:https://github.com/alibaba/nacos/releases
(2)解壓執行
預設是cluster,可以改成standalone,或者如下命令列執行,
單機執行
startup.cmd -m standalone
(3)訪問:http://127.0.0.1:8848/nacos/index.html#/login
使用者名稱密碼都是nacos
(4)gulimall-common的pom.xml匯入依賴:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> /* //如果出現loadbalancer相關錯誤,在nacos"包中移除ribbion依賴,並加入loadbalancer依賴" <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <!--不使用Ribbon 進行客戶端負載均衡--> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </exclusion> </exclusions> </dependency> */
(5)gulimall-member的application.yml增加nacos配置
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-member
(6)gulimall-member使用 @EnableDiscoveryClient
註解開啟服務註冊與發現功能
@EnableDiscoveryClient
(7)gulimall-coupon的application.yml增加nacos配置
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
(8)gulimall-coupon使用 @EnableDiscoveryClient
註解開啟服務註冊與發現功能
@EnableDiscoveryClient
(9)執行GulimallCouponApplication 和GulimallMemberApplication
(10)登入nacos檢視,服務已經註冊進來
3.Spring Cloud alibaba Naloas 配置中心
(1)匯入依賴
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2)增加bootstrap.properties配置,這個檔案是springboot裡規定的,他優先級別application.properties高
# 改名字,對應nacos裡的配置檔名
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
(3)增加application.properties配置
coupon.user.name = application.properties
coupon.user.age = 18
(4)CouponController增加測試程式碼
//從application.properties中獲取//不要寫user.name,他是環境裡的變數
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){
return R.ok().put("name",name).put("age",age);
}
(5)測試:http://localhost:7005/coupon/coupon/test
這裡就可以訪問本地application.properties的配置檔案
(6)nacos增加配置併發布
4.Spring Cloud alibaba Nacos 配置中心-名稱空間與配置分組
4.1 名稱空間
nacos新增名稱空間
prop配置
coupon.user.name = nacos.prop
coupon.user.age = 30
# 可以選擇對應的名稱空間 # 寫上對應環境的名稱空間ID
spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55
測試訪問:http://localhost:7005/coupon/coupon/test
-
名稱空間:用作配置隔離。(一般每個微服務一個名稱空間)
-
預設public。預設新增的配置都在public空間下
-
開發、測試、開發可以用名稱空間分割。properties每個空間有一份。也可以為每個微服務配置一個名稱空間,微服務互相隔離
-
在bootstrap.properties裡配置
spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55
-
-
配置集:一組相關或不相關配置項的集合。
-
配置集ID:類似於配置檔名,即Data ID
-
配置分組:預設所有的配置集都屬於
DEFAULT_GROUP
。雙十一,618的優惠策略改分組即可spring.cloud.nacos.config.group=DEFAULT_GROUP
4.2 配置分組
(1)為coupon新增一個名稱空間
(2)gulimall-coupon只讀取自己的配置(基於微服務隔離)
(3)可以設定不同的分組
coupon.user.name = coupon.11
coupon.user.age = 60
(4)測試:http://localhost:7005/coupon/coupon/test
(5)新增dev(開發環境)和prod(生產環境)分組,預設為dev分組
dev配置:
coupon.user.name = coupon.dev
coupon.user.age = 50
prod配置:
coupon.user.name = coupon.prod
coupon.user.age = 70
測試訪問:http://localhost:7005/coupon/coupon/test
5.Spring Cloud alibaba Nacos 配置中心-載入多配製集
(1)註釋application.yml
(2)nacos新增配置
datasource.yml
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
profiles:
active: dev
mybatis.yml
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
logic-delete-value: 1
logic-not-delete-value: 0
other.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
server:
port: 7005
(3)修改bootstrap.properties
# 改名字,對應nacos裡的配置檔名
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 可以選擇對應的名稱空間 # 寫上對應環境的名稱空間ID
spring.cloud.nacos.config.namespace=8531791b-f632-4588-a406-090f42c04d48
# 分組 預設DEFAULT_GROUP
spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
(4)測試執行,nacos配置讀取正常
訪問:http://localhost:7005/coupon/coupon/test
訪問:http://localhost:7005/coupon/coupon/list
6.注意:com.alibaba.cloud版本和nacos版本問題
com.alibaba.cloud是2.2.7.RELEASE版本,nacos如果是1.多版本就會註冊不進去,服務起不來
7.出現loadbalancer相關的錯誤
在nacos"包中移除ribbion依賴,並加入loadbalancer依賴"
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--不使用Ribbon 進行客戶端負載均衡-->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
在需要遠端呼叫的服務加上loadbalancer
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
8.不識別bootstrap.properties的錯誤
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>