ack 机制可以用来告诉 mq 你的消费者程序已经完成这个消息的处理了。
“个人觉得一般处理消息出错都是因为代码逻辑或者出bug,即使 队列中后来仍然保留该消息,然后再给某一个消费者消费,不还是报错吗?”
这个可以在创建 queue 的时候,设置dead letter 相关属性。
channel.basicQos(1);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(TASK_QUEUE_NAME, false, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
try{
doWork(message);
System.out.println(" [x] Done");
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}catch(Exception e){
channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);
System.out.println("出现异常, reject,不重新入队");
}
出现异常的时候,reject,且不重新入队,即可进入死信队列
有帮到你的点赞、收藏一下吧
需要更多教程,微信扫码即可
别忘了扫码领资料哦【高清Java学习路线图】
和【全套学习视频及配套资料】



