工作队列-公平分发
3.1模型
生产者将消息放入消息队列,有两个以上的消费者进行消费。
和轮训分发一样的是依旧拥有两个或两个以上的消费者,但是会根据消费者的处理消息能力分发任务
假设C1的处理能力强,那么C1将会处理更多的任务,而C2会处理更少的任务。

第一步:消费者关闭自动应答
channel.basicConsume(QUEUE_NAME,false ,consumer);
第二部:改成手动反馈处理完成的消息。即处理一次消息反馈一个回应
channel.basicAck(envelope.getDeliveryTag(),false);
第三部:限制每次发生数量,这样rabbitmq就不会一股脑的将数据全部分配好再发送了
channel.basicQos(1);
在消费者C1下添加以上代码
public class RecvC1 {
private final static String QUEUE_NAME

本文介绍了RabbitMQ如何通过公平分发策略解决消费者宕机导致的消息丢失问题。通过关闭自动应答、手动确认消息以及限制每次分发数量,确保处理能力强的消费者获取更多任务,同时在消费者宕机时,消息不会丢失。总结中提到,使用channel.basicQos(n)设置每次分发消息的数量,消费者处理并确认消息后,RabbitMQ才会继续发送,实现能者多劳的效果。
1454

被折叠的 条评论
为什么被折叠?



