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学习路线图】
和【全套学习视频及配套资料】
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)