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![image-20220213140628230]()
-
-
配置集:一组相关或不相关配置项的集合。
-
配置集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>


浙公网安备 33010602011771号