在处理来自 RabbitMQ 的消息时出现异常,我只想取消确认并将特定消息放回差异队列,或者重新排队到同一个队列或完全丢弃消息(根据 basicNack 中的最后一个布尔标志@requeue)。
整个想法是稍后我可以获得未确认消息的计数并检查消息格式等,而不是一次又一次地重新排队到同一个频道,而且我想将未确认的信号发送到当前频道。
仅供参考,我将通道确认模式设置为手动(即 container.setAcknowledgeMode(AcknowledgeMode.MANUAL);)
这就是我现在正在做的事情。
public class My***Listener implements ChannelAwareMessageListener{
try{
@Override
public void onMessage(Message message,Channel channel) throws Exception {
String s = new String(message.getBody());
//some logic
//after successful ack manually
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
}
catch(Exception e){
//currently on exception i am unack the channel
channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false);
}
任何帮助都是非常可观的。