消息队列 记录

在rabbitmq的工作队列模型中:

默认采用平均分配机制。 假如一个队列有两个消费者来消费, 队列中有10条待消费的 消息, 那么按照平均消费机制, 每个消费者可以消费5条消息。  如果有5个消费者,那么每个消费者可以消费2条消息。

这种消费机制有个缺点: 有的消费者能力强,处理信息快, 有的消费者能力弱,处理信息慢 , 导致消息分发不公平。 同时,分发消息时, 如果消费者采用自动确认模式, 则队列一次性将消息全部发给消费者,

由于是自动确认,队列将消息发出去之后会自动删除消息。 此时消息存储在消费者的通道中, 加入通道中有5条待处理的消息, 当消费者处理完2条后意外发生宕机,那么后面三条消息会丢失(队列中没有了,消费者也宕机了) , 要避免这种情况, 就得: 取消消费者自动确认机制, 改成手动确认机制 , 同时设定队列一次只能向通道中发送一条消息 。 消息存放在队列中,消费者每次通过通道拿取一条消息,然后处理完消息后, 手动给队列确认。 确认后队列再发送一条消息给通道。 这样就确保了消息不会丢失。同时对能力强的消费者消费的多, 对能力弱的消费者消费的少。

 

在rabbitmq广播模型中:

生产者要创建通道,通道绑定交换机。然后发送消息。

消费者需要创建通道,声明通道绑定的哪个交换机 ,然后创建一个临时队列, 将临时队列和交换机绑定在一起。 然后消费消息。

 

在rabbitmq的路由模式中:

基本和广播模式相同, 只是多了一步  指定路由的操作。

消费者和生产者都要绑定路由。 消费者消费消息时, 只能拿到和交换机中路由想匹配的消息。

在动态路由匹配中,  * 表示匹配一个单词。 假如交换机路由表中的路由是: user.save , 那么消费者要匹配的上就得写成  user.*   , 如果路由表中路由是 user.save.add  ,那么消费者user.* 就匹配不上了, 应为*只替换一个单词, 而路由表中路由键有两个单词。 写成user.# 则可。 因为#代表匹配0个到多个单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值