但是,我们不想丢失任何任务,如果有一个消费者挂掉了,那么我们应该将分发给它的任务交付给另一个消费者去处理 。
为了确保消息不会丢失,RabbitMQ支持消息应答 。消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了 。RabbitMQ就可以删除它了 。
因此手动ACK的常见手段:
// 接收消息之后,主动ack/nak
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
String message = new String(body, "UTF-8");
try {
System.out.println(" [ " + queue + " ] Received '" + message);
channel.basicAck(envelope.getDeliveryTag(), false);
} catch (Exception e) {
channel.basicNack(envelope.getDeliveryTag(), false, true);
}
}
};
// 取消自动ack
channel.basicConsume(queue, false, consumer);
推荐阅读
- 生科医学|突发!日本首相岸田文雄感染新冠:全国医疗已经崩溃
- Firefox浏览器|火狐浏览器新增实用工具:将支持图片文字识别
- 超跑|3.5秒破百的V12怪兽!阿斯顿马丁新超跑限量249辆已卖空
- 青椒猪肝的做法
- 冻肉新做法
- 动画|《白蛇》系列团队全新力作!《新神榜:杨戬》上映两天票房破亿
- 登月|中国长征系列火箭创下新纪录:2030年左右载人登月!
- 薰衣草枕头最新功效和作用介绍 熏衣草枕头
- 蚊子|南方蚊子变少了?或热死或北上避暑:天气转凉后会重新活跃
- 充电|四川供电紧张 半夜连跑三个充电桩才充上电 新能源车主:体会到狼狈