Rabbit MQ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

安装登陆完以后,进入后台界面:

 

 创建新工程,完成与mq的联动操作:

pom:

 

 

 

 

 

 先写生产者代码:

 

 

 

 

 

 

 运行:

 

 再写消费者的代码:

 

 

 

 

 

 

 再做点修改:

只接受消息的消息体:

 

 运行:

 

 ===========

 

 

 

 抽取工具类:

 

 

写两个工作线程:

 

 

 

 

在idea中设置一个类可以多线程运行:

 

 两个都运行起来:

 

 ===

写生产者:

 

 

 

 

 

 

 

 运行:

 

 

 

 

 

 ==========

 

 

 

 

 

 

 

 ====

 

 

 

 

 

 写新的生产者和消费者,设定成手动应答:

 

 

 先写个工具类:

 

 

编写消费者:

 

 

 

 另一个消费者只要修改下沉睡时间和信息就可以:

 

 运行:

 

因为worker4等待时间较长,所以如果在发送消息,需要worker4来接受时,如果worker4还没收到消息,就宕机了,那消息就会被worker3接收到。这就完成了手动应答。

============

 

 

 

 

 

 

 

 

 

 

 

改成不公平分发原理:

 

 

 由于C2等待时间较长,所以基本都是由C1来接受消息。

=========

欲取值的设定:

 

 

 

 ===

要做到消息不丢失,要做到三步,除了队列和消息持久化,还要做发布确认:

 

 

 

 

 

 

 

 

 

 

 

 批量确认发布只有几行代码不一样:

 

 

 

 异步发布确认消息:

 

 

 

 

 修改代码:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 绑定演示:

在网页上添加一个队列:

 

 再添加一个交换机:

 

 把新添加的队列和新添加的交换机绑定:

 

 

 

 发消息的过程:

 

 

 

 fanout演示(广播,两个接收方,一个发送方):

 

 

 

 

 

 相同的代码再写一个,改下名称。

然后写生产者:

 

 测试:

 

 

 

 

 

 

 

 

 

 

 

 直接交换机演示:

 

 

 

 

 

 第二个接收方的代码稍微改改:

 

 

运行测试:

只有2号接收到:

 

 

 

 

 这样可以制定哪个接受者接收。

====

 

 

 

 

 

 

 

 

 

 

 

 

 主题交换机演示:

写消费者1:

 

 

 

 编写消费者2,代码稍微改改就行:

 

编写生产者:

 

 

 

 

 

 运行测试:

 

 

 

 

 

 

 

 

 

 

 

 

 

死信队列演示:

消费者1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 编写生产者:

 

 

 

消费者2:

 

测试得出,超时的信息都会进入死信队列。

======

现在测试队列的最大长度,先把生产者中的超时时间去掉,然后在消费者1中添加队列长度:

 

 修改了参数之后,要在网页上把原来的队列删除,再重新启动消费者1就没问题了:

 

 把消费者1关掉,造成宕机,然后生产者发10个消息,因为队列最多只能挤压6个,所以还剩4个去到死信队列:

 

 

===

演示消息被拒绝,进入死信队列:

 

 

先把原来的普通队列删掉,在重启消费者1,然后启动生产者并发消息:

 

 ========

延迟队列:

 

 

 

 

 

 利用springboot框架演示:

 

 pom:

 

 

 

 

 

 

 

 配置文件:

 

 

 

 创建一个配置类:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 编写生产者:

 

 

 

 消费者:

 

 测试:

 

 

 添加一个qc队列:

 

 

 

 

 

 在编写一个生产者发消息给qc:

 

 

 

 为了解决死信队列排队的问题,需要到官网下载一个插件:

 

 

 

 然后重启rabbitmq:

 

 到监控页面查看:

 

 

 

 演示延迟交换机:

先写配置类:

 

 

 

 

 

 

 

 编写生产者:

 

 消费者:

 

 测试:

 

 

 =============

 

 先写一个完整的发消息流程,再演示交换机宕机的情况:

 

 

 

 

生产者:

 

 消费者:

 

 测试:

 

 

因为这是正常情况,所以没有问题,为了演示交换机宕机,先写一个交换机回调方法:

 

 

 

 

 

 给生产者补上点代码:

 

 要让回调方法成功,还要改配置文件:

 

 

 

 

 测试,回调方法可以跑通:

 

 

 演示交换机宕机:

先让生产者找不到交换机:

 

 测试:

 

==============

 

 如果队列出问题,就要添加回退接口,让无法送到队列的消息回退给生产者:

 

 

 

 修改配置文件:

 

 

测试:

故意写错routingkey:

 

 注入:

 

 测试,消息被退回:

 

 

 

 

 

 

添加备份交换机,备份队列,报警队列:

 

 

 

 

 

 给原来的交换机加上备份交换机:

 

 

 创建报警消费者:

 

 

如果修改了交换机的代码,就需要去监控页面把交换机删了,在重新加载一次。

 测试:

 

 

 

 

 

 

 =======================

 

 

 

 

 =============

 

 

设置队列最大优先级(1-255):

 

 

用代码设置:

 

 给消息设置优先级:

 

 

测试,先发消息,让消息都进入队列,然后启动消费者查看:

 

 

 

 

 

 可以在网页设置:

 

 

 

 

 

 

 

 

用模拟机克隆几个MQ:

 

 查看id,然后连接:

 

 

 

 

 

 

 

 

 

 

 

看视频P84。

 ===========

 

 

 

 

 

所以备份以后一个mq宕机以后也没关系:

 

 

 ====

 

 

 

 ==============

 

 

 

 视频P87

 

 

 视频P91

 

posted @ 2021-07-13 16:22  即墨非音  阅读(72)  评论(0)    收藏  举报