nacos 配置中心
基本配置
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
新建 bootstrap.propeties 文件
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
不使用配置中心的方式
coupon.user.name=zhangsan
coupon.user.age=18
@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);
}
GET http://localhost:7000/coupon/coupon/test
{
"msg": "success",
"code": 0,
"name": "zhangsan",
"age": 18
}
存在的问题,需要更改源码才能修改配置
使用配置中心的方式
获取的配置默认是 当前应用名.properties 文件
新建一个配置,重启项目
{
"msg": "success",
"code": 0,
"name": "zhangsan",
"age": 18
}
但是不能动态更新
Controller 类加上 @RefreshScope 注解
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
就可以动态更新了,在不重启应用的情况下可以更改配置了
命名空间
用途1:利用 namespace 来做 开发,测试,生产,环境隔离
创建三个名称空间
默认使用的是 public 名称空间
bootstrap.properties 里面加上
# namespace
spring.cloud.nacos.config.namespace=c0634c19-b34d-4ec4-8d9c-7b0afa66e745
再去测试就可以切换到test 下面的配置了
用途2:利用 namespace 来做 微服务模块,环境隔离
根据模块名分别创建两个命名空间
克隆配置
总结
两种隔离的方式
配置分组
新增一个1111分组
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# namespace
spring.cloud.nacos.config.namespace=6968c1e1-c80f-4aa9-89de-56f3a06a4f2d
# group
spring.cloud.nacos.config.group=1111
最佳实践
使用 namespace 区分微服务,使用 分组区分 环境 test dev prod
# namespace
spring.cloud.nacos.config.namespace=6968c1e1-c80f-4aa9-89de-56f3a06a4f2d
# group
spring.cloud.nacos.config.group=dev
{
"msg": "success",
"code": 0,
"name": "coupon-dev",
"age": 18
}
加载多数据集
# namespace
spring.cloud.nacos.config.namespace=6968c1e1-c80f-4aa9-89de-56f3a06a4f2d
# group
spring.cloud.nacos.config.group=dev
# 加载多数据集
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
Gateway网关
加入模块 gulimall-gateway
添加 Gateway 依赖
<dependency>
<groupId>com.zhouzhou.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
开启服务的注册发现
加上 @EnableDiscoveryClient 注解
application.properties: nacos 服务注册与发现相关的配置 还有端口配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
nacos 配置中心相关的配置
先创建一个 gateway 名称空间
spring:
application:
name: guliall-gateway
bootstrap.properties:
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# namespace
spring.cloud.nacos.config.namespace=75db34bd-5133-4310-bd32-e1d0c2e0e31c
# group
#spring.cloud.nacos.config.group=dev
取消 数据源的自动化配置
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}
gateway网关模块就可以运行起来了
下面我们进行具体的配置
我们完成访问 http://localhost:88/?url=baidu 跳转到百度
访问 http://localhost:88/?url=qq 跳转到 qq
application.yml
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://im.qq.com/
predicates:
- Query=url,qq