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
在微服务架构的系统中, 我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来, 由于该主题中产生的消息会被所有实例监听和消费, 所以我们称它为消息总线. 在总线上的各 ...
随机推荐
- java程序设计基础篇 复习笔记 第一单元
java语言程序设计基础篇笔记1. 几种有名的语言COBOL:商业应用FORTRAN:数学运算BASIC:易学易用Visual Basic,Delphi:图形用户界面C:汇编语言的强大功能和易学性,可 ...
- LeetCode OJ:Number of 1 Bits(比特1的位数)
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...
- js 倒计时 时间戳
功能:传入一个截止时间(unix时间戳),显示倒计时 因为unix时间戳,并不等于js 的new Date().getTime()得到的那一串毫秒数,所以要在JS中使用unix时间戳,必须先转换一下u ...
- 《Effective C++》第3章 资源管理(2)-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- operator模块常见方法介绍
operator.concat(a, b) 对于 a.b序列,返回 a + b(列表合并) --------------------------------- operator.countOf(a, ...
- C++面向对象高级编程(四)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“ ...
- 动态PIVOT行转列
id name subject score remark1 l math 86 2 l eng 68 3 l phy 88 4 z chn 99 5 z math 92 6 z com 98 7 z ...
- Vim技能修炼教程(5) - 操作符实务
操作符实务 操作符复习 上次我们讲了操作符与文本对象的组合这样一个vim的强大功能.但是上节的知识点过于密集,可读性可能差了一点.不过没关系,重要的知识点在后面用到的时候我们可以先复习一下. 我们还是 ...
- 05-python中函数的使用
函数:就是让程序模块化,把具有独立功能的代码块当成一个整体封装成一个函数 首先打印一个佛主看看: print(" _ooOoo_ ") print(" o8888888o ...
- iOS调用第三方API/Framework
前言 老板不止一次地说过:这个世纪靠个人的能力去完成一件事情肯定是不够的.无论什么方面我们都可以找到许许多多的事例表明合作共赢的重要性,例如Linux的发展.建筑事务所的发展.乃至科学技术的发展等等. ...