天天看点

Spring Cloud: 配置总线bus

Spring Cloud bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring Cloud bus的一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。

Spring Cloud bus被国内很多都翻译为消息总线,也挺形象的。大家可以将它理解为管理和传播所有分布式项目中的消息既可,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。利用bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述bus在配置中心使用的机制。

Spring Cloud: 配置总线bus

根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:

1、提交代码触发post给客户端A发送bus/refresh

2、客户端A接收到请求从Server端更新配置并且发送给Spring Cloud bus

3、Spring Cloud bus接到消息并通知给其它客户端

4、其它客户端接收到通知,请求Server端获取最新配置

5、全部客户端均获取到最新的配置

代码案例

1.添加服务器端的依赖

<!--spring cloud  bus依赖-->
		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-bus -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-bus</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
			<version>2.0.0.RELEASE</version>
		</dependency>


           

2.在properties中的配置中添加Rabbitmq的配置

spring.rabbitmq.host=**.***.**.***
spring.rabbitmq.port=5672
spring.rabbitmq.username=******
spring.rabbitmq.password=******

#暴露触发消息总线的地址
management.endpoints.web.exposure.include=bus-refresh
           

3.在客户端的依赖添加如下:

<!--spring cloud  bus依赖-->
		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-bus -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-bus</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
			<version>2.0.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
			<version>2.0.4.RELEASE</version>
		</dependency>


           

4.同理,在配置文件中,添加Rabbitmq的配置

Spring Cloud: 配置总线bus

5.启动项目。然后再码云上修改了配置文件,再本地先执行该步骤,即手动发送一个POST请求

http://127.0.0.1:12000/actuator/bus-refresh
           

6.然后请求其他请求,可以验证是已经自动编译了修改了配置的信息,而且是再没有重启的情况下,就执行了。

Spring Cloud: 配置总线bus

7.关于自己自定义的注解,再配置文件修改后,如果想在码云上修改就立即可用的话,需要在类中添加注解@RefreshScope即可自动读取自定义的配置文件信息了。

Spring Cloud: 配置总线bus

继续阅读