Spring Cloud Bus 消息总线 RabbitMQ
Spring Cloud Bus将分布式系统中各节点通过轻量级消息代理连接起来。 从而实现例如广播状态改变(例如配置改变)或其他的管理指令。 目前唯一的实现是使用AMQP代理作为传输对象。
Spring Cloud Bus又被称为消息总线,负责管理和传播所有分布式系统中的消息,通过集成MQ实现广播机制,目前常用的有Kafka和RabbitMQ。利用bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景。及利用消息总线,可以实现当配置中心的refresh命令触发后,通过广播发送到每一个配置使用端。
Spring已经在Config包中完成了大部分的工作,我们只需要在之前的配置中心的基础上,做如下修改:
1.给config-server和config-client增加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2.给config-server和config-client配置文件中增加MQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=lg
spring.rabbitmq.password=lg
3.依次启动RabbitMQ 、 Eureka 、config-server 、config-client1、config-client2
4.在github上修改配置文件,刷新config-client查看配置,此时未更新
然后执行 curl -X POST http://localhost:8011/bus/refresh 后,再次查看config-client配置,此时已经更新
5.登录RabbitMQ 管理页面,可查看到connecting,queue等信息。
有时候可能需要部分刷新,即只刷新指定的config-client,spring同样支持,只需要在调用/bus/refresh接口时传递destination参数即可,如:
/bus/refresh?destination=config-client:8031 或 /bus/refresh?destination=config-client:**
自定义消息并通过消息总线发送
在之前几个项目的基础上,我们做如下修改:
1.config-server类增加Sender类
@Component
public class Sender { private static AtomicInteger count = new AtomicInteger(1); @Autowired
private AmqpTemplate rabbitTemplate; public void send() {
String msg = "msg" + count.getAndIncrement() + " " + new Date();
System.out.println("Sender : " + msg);
this.rabbitTemplate.convertAndSend("hello", msg);
}
}
2.config-server类增加定时任务,给主类加注解@EnableScheduling,每3秒发一次消息:
@Component
public class ScheduledTasks { @Autowired
private Sender sender; @Scheduled(initiaDelay=5000, fixedRate = 3000)
public void reportCurrentTime() {
sender.send();
} }
3.分别给config-client1和config-client2增加接受类Receiver
@Component
@RabbitListener(queues = "hello")
public class Receiver { @RabbitHandler
public void process(String msg) {
System.out.println("Receiver : " + msg);
} }
4.依次启动 eureka config-server config-client
5.观察控制台输出如下:
config-server:
Sender : msg1 Sun Aug 06 21:56:03 CST 2017
Sender : msg2 Sun Aug 06 21:56:06 CST 2017
Sender : msg3 Sun Aug 06 21:56:09 CST 2017
Sender : msg4 Sun Aug 06 21:56:12 CST 2017
Sender : msg5 Sun Aug 06 21:56:15 CST 2017
Sender : msg6 Sun Aug 06 21:56:18 CST 2017
Sender : msg7 Sun Aug 06 21:56:21 CST 2017
Sender : msg8 Sun Aug 06 21:56:24 CST 2017
Sender : msg9 Sun Aug 06 21:56:27 CST 2017
config-client1:
Receiver : msg2 Sun Aug 06 21:56:06 CST 2017
Receiver : msg4 Sun Aug 06 21:56:12 CST 2017
Receiver : msg6 Sun Aug 06 21:56:18 CST 2017
Receiver : msg8 Sun Aug 06 21:56:24 CST 2017
config-client2:
Receiver : msg1 Sun Aug 06 21:56:03 CST 2017
Receiver : msg3 Sun Aug 06 21:56:09 CST 2017
Receiver : msg5 Sun Aug 06 21:56:15 CST 2017
Receiver : msg7 Sun Aug 06 21:56:21 CST 2017
Receiver : msg9 Sun Aug 06 21:56:27 CST 2017
可见client从单个queue中依次取消息
参考:http://projects.spring.io/spring-cloud/spring-cloud.html
end
Spring Cloud Bus 消息总线 RabbitMQ的更多相关文章
- Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)
详见:https://www.w3cschool.cn/spring_cloud/spring_cloud-jl8a2ixp.html 上一篇文章,留了一个悬念,Config Client 实现配置的 ...
- spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】
1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...
- 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线
SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...
- 干货|Spring Cloud Bus 消息总线介绍
继上一篇 干货|Spring Cloud Stream 体系及原理介绍 之后,本期我们来了解下 Spring Cloud 体系中的另外一个组件 Spring Cloud Bus (建议先熟悉 Spri ...
- Spring Cloud 2-Bus 消息总线(九)
Spring Cloud Bus 1.服务端配置 pom.xml application.yml 2.客户端配置 pom.xml application.yml Controller.java 3 ...
- Spring Cloud Stream消息总线
Springcloud 里面对于MQ的整合一个是前一篇的消息总线一个是本文介绍的消息驱动 大体要学习这么几个知识点: 课题:SpringCloud消息驱动Stream1.什么是SpringCloud消 ...
- SpringCloud学习之Bus消息总线实现配置自动刷新(九)
前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...
- 第七篇: 消息总线(Spring Cloud Bus)
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...
- 第九章 消息总线: Spring Cloud Bus
在微服务架构的系统中, 我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来, 由于该主题中产生的消息会被所有实例监听和消费, 所以我们称它为消息总线. 在总线上的各 ...
随机推荐
- 010——数组(十)compact extract in_array
<?php /** 10 数组 compact extract in_array */ //compact() (紧凑的,简洁的) 将变量转换为数组,变量名为数组键名,变量值为数组的键值. /* ...
- Spring入门5.事务管理机制
Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- *SCM-MANAGERtomcat寄宿使用
采用的部署方式 TomCat 一个端口下部署多个 Application供不同部门使用 初始部署详参见 SCM-MANAGER 博文 日常使用添加部门操作步骤 从“D:\tomcat\webapps” ...
- Java发送短信
1.接口使用介绍 发送短信肯定需要使用第三方接口,Java本身是肯定不能直接发送短信的.第三方接口有很多,这里直接找个正规靠谱一点的学习一下 这里使用了中国网建(http://sms.webchine ...
- 【LeetCode 28_字符串_匹配】Implement strStr()
解法一:Brute-force int strStr(string haystack, string needle) { int m = haystack.size(); int n = needle ...
- Windows平台编程涉及的函数
VirtualAlloc 调用进程的虚拟地址空间 GetTickCount 返回从操作系统启动到当前所经历过的毫秒数 malloc.h内存分配函数,需要头文件malloc.h
- CSS: rem
.rem是(font size of the root element) 一般都是body的font-size为基准,即rem是相对于根元素. 字体单位 根据html根元素大小而定,同样可以作为宽度, ...
- Corosync+pacemaker实现集群的高可用
一.Corosync和pacemaker的了解: Corosync是集群管理套件的一部分,他在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等.也就是说,corosync是Mess ...
- 利用 squid 反向代理提高网站性能(转载)
本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...