SpringCloud中的配置中心(config)和消息总线(Bus)的整合使用,解决的是项目中的配置文件的更改后的及时刷新!!!
config配置中心
配置 服务端的config,
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
yml的配置:
server:
port: 3344
spring:
application:
name: springcloudconfigserver #名称
cloud:
config:
server:
git:
search-paths:
- springcloud
uri: https://gitee.com/search122/springcloud.git
default-label: master
我们使用配置管理对远程仓库进行拉取代码配置文件
- uri 表示的是gitee的仓库地址
- search-paths 表示的是gitee的仓库的名称
- default-label 表示的是哪一个分支
配置好了config配置中心之后我们启动主启动类。通过浏览器进行访问当前的3344端口http://localhost:3344/master/application-pro.yml 查找到配置文件
(这里的gitee可以直接访问,已经开启了一个仓库,也有配置文件,你们可以直接获取)
config配置中心客户端:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
上面依赖的意思分别对应的是 web eureka注册中心 bootstrap配置文件 监控中心
config客户端配置中心的配置文件采用的是bootstrap.yml,所以对应的依赖必不可少。
客户端配置yml:
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8080/eureka/
spring:
application:
name: configclient2
cloud:
config:
label: master
name: application
uri: http://localhost:3344
profile: pro
- label 表示的是当前uri的哪个分支
- name 表示当前拉取仓库的哪个文件名称(因为仓库有application-pro.yml文件)
- profile:文件采用的是’-‘分离的,所以这里的Pro表示的文件’-‘后面的内容。
- uri: 表示的是当前项目的config服务端配置的端口是3344。
配置后之后启动浏览器进行过访问当前3355端口,意思就是获取通过3355获取到3344,然后通过3344获取到远程仓库的配置文件的信息。
如果能够访问到说明已经成功配置好了配置中心。
问题来了:
缺点,如果运维人员对远程仓库进行修改了配置文件,那么只有config服务端能够实时的刷新,而其他config客户端的服务没法动态的获取。
如何解决:
需要通过命令行的方式进行激活一下config客户端的服务才可以生效。
整改1:
修改配置中心的服务3355,更改添加一个监控的依赖,再加一个注解,再yml文件写一段配置即可。3步骤、
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
再次启动,重复上次的操作,修改之后看看有没有进行动态刷新,因为此时我们已经配置了监控,那么使用命令行的方式curl -X POST “http://localhost:3355/actuator/refresh”
再次查看浏览器是否刷新。
重头戏:
每次都需要命令行对单个客户端配置中心进行激活,那样很麻烦,所以使用消息总线bus.
需要用到RabbitMq,你们自己去官网下载,只要能运行RabbitMQ就行
3344服务端整改:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
yml进行修改:
添加rabbitmq的配置信息
更改监控的信息bus-refresh。如果遇到bug百度一下。
之后再次启动服务修改远程仓库的信息之后,我们不需要重新激活每一个客户端,只需要激活配置中心3344即可。