分布式配置中心可以实现不需要重启我们的服务器,动态的修改我们的配置文件内容,常见的配置中心有携程的阿波罗、SpringCloud Config、Nacos轻量级的配置中心等。
Nacos支持三种部署模式,分别为:
官方文档网址:https://nacos.io/zh-cn/docs/deployment.html,多集群一般涉及到多机房问题,一般我们用不到,即使用到了也是bat等级别的一线互联网公司,所以我们只讲解单机模式和集群模式。
【Nacos单体模式】
①. 发布:进入http://localhost:8848/nacos,配置管理 - 配置列表 - 点击右上角的加号 - 填写参数,点击发布即可
②. 客户端service-impl-order读取配置:
service-impl引入实现类公共依赖:
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
0.2.2.RELEASE
新建bootstrap.yml配置:
# 【application.yml】
server:
port: 8090
# 【bootstrap.yml】
spring:
application:
# 服务名称
name: service-order
cloud:
nacos:
discovery:
# nacos注册地址
server-addr: 127.0.0.1:8848
config:
# 配置中心连接地址
server-addr: 127.0.0.1:8848
# 分组
group: DEFAULT_GROUP
# 类型
file-extension: properties
编写测试接口:
@RestController
public class OrderService {
@Value("${xyy.age}")
private String age;
@GetMapping("/getAge")
public String getAge(){
return age;
}
}
可以发现,我们的SpringBoot项目并没有配置xyy.age,而是直接去Nacos读取了配置。
③. 实时刷新
需要在用到@Value("${}")注解的类上添加注解@RefreshScope,那么是不是以后每个controller都需要加该注解?
答案是不用的,只需要把需要用到的该注解的属性封装到一个公共类中,在这个类上加入该注解即可,其它需要调用的地方直接调公共类即可。
重启订单服务,getAge接口返回结果为22,此时在Nacos门户把xyy.age改为23,则不重启服务,再次访问getAge接口,会发现返回结果为23。
④ 版本控制
与SpringBoot一样,直接在配置文件末尾加入dev/prd即可;新建两个配置文件分别为service-order-dev.properties,service-order-prd.properties,xyy.age分别为20,30,此时分别在bootstrap指定dev,prd,会发现返回结果是有区别的。
⑤ yml,properties区分
新建service-order-prd.yaml,在bootstrap.yml指定file-extension为yaml,重启服务,返回结果变为18。
【Nacos集群模式】
1. 新建数据库nacos_config,导入nacos/conf下的nacos-mysql.sql,(数据库版本有要求)。
在application.proerties加入下面配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
修改cluster.conf.example为cluster.conf并修改配置为:
拷贝3个上述配置,并修改application.properties的server.port分别为8848,8849,8850。
2. Nginx实现Nacos负载均衡
host配置文件:
Nginx配置文件:
启动Nginx,访问http://nacos.xyy.com/nacos即可访问到Nacos的Portal网站。
SpringCloudAlibaba集群方式连接,修改bootstrap.yml文件如下: