RabbitMQ 5种队列

本文介绍了RabbitMQ的五种队列模式:简单队列、Work模式(包括轮询分发和公平分发)、订阅模式、路由模式和主题模式。Work模式中,轮询分发确保每个消费者获取不同消息,而公平分发则根据消费者处理速度动态分配任务。订阅模式下,消息通过交换机到达多个队列,路由模式利用路由键将消息发送给特定队列,主题模式则使用通配符匹配多队列。

RabbitMQ  5种队列

 

 

 

1.简单队列

 

这里写图片描述

 

生产者 - >  Queue ->  消费者 

 

2. Work模式

 

 

这里写图片描述

 

一个生产者、2个消费者。

一个消息只能被一个消费者获取。

 

轮询分发模式

1、消费者1和消费者2获取到的消息内容是不同的,同一个消息只能被一个消费者获取。
2、消费者1和消费者2获取到的消息的数量是相同的,一个是消费奇数号消息,一个是偶数。

 

公平分发 (能者多劳)

 

// 同一时刻服务器只会发一条消息给消费者
channel.basicQos(1);
 

// 表示使用手动确认模式
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
 

// 监听队列,false表示手动返回完成状态,true表示自动
channel.basicConsume(QUEUE_NAME, false, consumer);

 

同一时刻服务器 只会发一条消息给消费者,

若为手动确认模式,则不返回确认完成状态,队列将不会再发消息给消费者, 因此能者多劳

 

轮询分发 :使用任务队列的优点之一就是可以轻易的并行工作。如果我们积压了好多工作,我们可以通过增加工作者(消费者)来解决这一问题,使得系统的伸缩性更加容易。在默认情况下,RabbitMQ将逐个发送消息到在序列中的下一个消费者(而不考虑每个任务的时长等等,且是提前一次性分配,并非一个一个分配)。平均每个消费者获得相同数量的消息。这种方式分发消息机制称为Round-Robin(轮询)。


公平分发 :虽然上面的分配法方式也还行,但是有个问题就是:比如:现在有2个消费者,所有的奇数的消息都是繁忙的,而偶数则是轻松的。按照轮询的方式,奇数的任务交给了第一个消费者,所以一直在忙个不停。偶数的任务交给另一个消费者,则立即完成任务,然后闲得不行。而RabbitMQ则是不了解这些的。这是因为当消息进入队列,RabbitMQ就会分派消息。它不看消费者为应答的数目,只是盲目的将消息发给轮询指定的消费者。
 

3.订阅模式

 

 

这里写图片描述

 

 

解读:
1、1个生产者,多个消费者
2、每一个消费者都有自己的一个队列
3、生产者没有将消息直接发送到队列,而是发送到了交换机
4、每个队列都要绑定到交换机
5、生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的
注意:一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费

 

4.路由模式

 

 

 

这里写图片描述

 

 

交换机通过路由key 来将消息发送给具体某个(某几个)队列,分发给消费者。

//发送消息            交换机名       路由key          消息
channel.basicPublish(EXCHANGE_NAME,routingKey,null,msg.getBytes());

若路由key为 info  则消息只会发送 amqp.gen-Agl...

若路由key 为error 则消息会发送给 amqp.gen-Agl..  和  amqp.gen-S9b

 

5.8.主题模式(通配符模式)

 

这里写图片描述

 

 

 

这里写图片描述

 

 

同一个消息被多个消费者获取。一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费到消息。

符号"#" 匹配一个或多个词,符号" * "  匹配不多不少一个词。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值