最新资源2022-07-01
RabbitMQ下载链接:https://pan.baidu.com/s/1VBbH40EvY46jNRdiKYhFuw 提取码:bcuq 版本 rabbitmq-server-3.10.5.exe
ErLang下载链接:https://pan.baidu.com/s/14VdKLiprOYPNtCYkZIkikQ 提取码:a80b 版本 otp_win64_25.0.exe
RabbitMQ队列模式:
1.简单队列:生产者将消息发送到队列,消费者从队列中获取消息。
2.work模式:一个生产者,两个消费者,一个消息只能被一个消费者获取。
3.订阅模式:1个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列都要绑定到交换机,生产者发送的消息,经过交换机,到达队列,实现一个消息被多个消费者获取的目的,
注意:一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费
4.路由模式:交换机可以绑定一个或多个队列,当交换机没有绑定队列时,消息会直接丢弃,若声明的队列没有持久化,程序停止后,绑定队列会自动删除
5.主题模式(通配符模式):同一个消息被多个消费者获取。一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费到消息
NuGet安装包:RabbitMQ.Client(6.4.0)
二、RabbitMQ 相关知识
1. 消息分发机制
轮询分发 :使用任务队列的优点之一就是可以轻易的并行工作。如果我们积压了好多工作,我们可以通过增加工作者(消费者)来解决这一问题,使得系统的伸缩性更加容易。在默认情况下,RabbitMQ将逐个发送消息到在序列中的下一个消费者(而不考虑每个任务的时长等等,且是提前一次性分配,并非一个一个分配)。平均每个消费者获得相同数量的消息。这种方式分发消息机制称为Round-Robin(轮询)。
公平分发 :虽然上面的分配法方式也还行,但是有个问题就是:比如:现在有2个消费者,所有的奇数的消息都是繁忙的,而偶数则是轻松的。按照轮询的方式,奇数的任务交给了第一个消费者,所以一直在忙个不停。偶数的任务交给另一个消费者,则立即完成任务,然后闲得不行。而RabbitMQ则是不了解这些的。这是因为当消息进入队列,RabbitMQ就会分派消息。它不看消费者为应答的数目,只是盲目的将消息发给轮询指定的消费者。
2. 消息的确认模式
消费者从队列中获取消息,服务端如何知道消息已经被消费呢?
模式1:自动确认
只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。
模式2:手动确认
消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。
3. Ack,Nack,Reject的关系
1. 消息处理成功,执行Ack,RabbitMQ会把消息从队列中删除。
2. 消息处理失败,执行Nack或者Reject:
a) 当requeue=true时,消息会重新回到队列,然后当前消费者会马上再取回这条消息;
b) 当requeue=false时,如果Exchange有设置Dead Letter Exchange,则消息会去到Dead Letter Exchange;
c) 当requeue=false时,如果Exchange没设置Dead Letter Exchange,则消息从队列中删除,效果与Ack相同。
3. Nack与Reject的区别在于:Nack可以批量操作,Reject只能单条操作。
参考:https://blog.csdn.net/sundna/article/details/92701805
介绍与安装步骤:https://blog.csdn.net/shuux666/article/details/124337419
vs2022:https://blog.csdn.net/qq_45222482/article/details/125302956
https://www.cnblogs.com/oktokeep/p/16363003.html
https://www.csframework.com/archive/1/arc-1-20211230-4163.htm
https://www.csframework.com/archive/1/arc-1-20211230-4107.htm