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

浙公网安备 33010602011771号