安装登陆完以后,进入后台界面:
创建新工程,完成与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