分布式配置中心

172 阅读3分钟

分布式配置中心的作用

分布式配置中心可以实现不需要重启我们的服务器,动态的修改我们的配置文件内容,
常见的配置中心有携程的阿波罗、SpringCloud Config、Nacos轻量级的配置中心等。

轻量级: 部署、架构设计原理都比较简单,学习成本也比较低。重量级: 部署、架构设计、体积都非常大,学习成本比较高。

原理

1、本地应用读取我们云端分布式配置中心文件(第一次建立长连接)
2、本地应用读取到配置文件之后,本地jvm和硬盘中都会缓存一份
3、本地应用与分布式配置中心服务端一直保持长连接
4、当我们的配置文件发生变化(MD5|版本号)实现区分,将变化结果通知给我们的本地应用及时地刷新我们的配置文件。

原理


完全百分百实现动态化修改我们的配置文件

代码实现

1、新增配置文件

新增配置文件

2、项目中添加依赖

| 1 2 3 4 5 | ``` org.springframework.cloud spring-cloud-starter-alibaba-nacos-config 0.2.2.RELEASE

| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

##### [](#3%E3%80%81%E6%96%B0%E5%BB%BAbootstrap-yml "3、新建bootstrap.yml")3、新建bootstrap.yml

| ```
1 2 3 4 5 6 7 8 9 10 11 12 13 
``` | ```
spring:   cloud:     nacos:       discovery:         server-addr: 127.0.0.1:8848         enabled: true       config:         ###配置中心连接地址         server-addr: 127.0.0.1:8848         ###分组         group: DEFAULT_GROUP         ###类型         file-extension: yaml 
``` |
| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

##### [](#5%E3%80%81%E4%BB%A3%E7%A0%81 "5、代码")5、代码

| ```
1 2 3 4 5 6 7 8 9 10 11 
``` | ```
@RestController @RefreshScope public class UserServiceImpl implements UserService {      @Value("${tinner.name}")     private String tinnerName;     @Override     public String getUser(Integer userId) {         return tinnerName + "我是会员服务";     } } 
``` |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

### [](#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9 "注意事项")注意事项

* 本地如果也配置相同的key,那么在启动的时候可能会抛出异常
* 可以实现动态实现`@RefreshScope`
* nacos在windows版本下运行默认是单机版本 需要指定`startup.cmd -m cluster`
* nacos在linux版本下运行默认是集群版本 如果想连接单机版本 `startup.cmd –m standalone`

### [](#bootstrap%E4%B8%8Eapplication%E5%8C%BA%E5%88%AB "bootstrap与application区别")bootstrap与application区别

* bootstrap.yml 用于应用程序上下文的引导阶段。
* application.yml 由父Spring ApplicationContext加载。

### [](#%E5%A4%9A%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6 "多版本控制")多版本控制

##### [](#1%E3%80%81%E6%96%B0%E5%A2%9Eprod%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6 "1、新增prod配置文件")1、新增prod配置文件

![新增配置文件](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d464709146dc452a925bc9fb09d7bc1b~tplv-k3u1fbpfcp-zoom-1.image)

##### [](#2%E3%80%81%E4%BF%AE%E6%94%B9%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6 "2、修改项目的配置文件")2、修改项目的配置文件

![新增配置文件](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/339b45b9247c453f96fd9d975a5fc3e9~tplv-k3u1fbpfcp-zoom-1.image)

### [](#Nacos%E9%9B%86%E7%BE%A4%E6%A8%A1%E5%BC%8F "Nacos集群模式")Nacos集群模式

官方文档:<https://nacos.io/en-us/docs/cluster-mode-quick-start.html>\
视频教程:<https://www.bilibili.com/video/BV1D7411A7Ru?p=43>