微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

手动 ACK 批量 AMQP 消息

如何解决手动 ACK 批量 AMQP 消息

我可以使用以下代码接收批处理消息。但现在我的问题是,我应该如何手动确认消息。一一ACK列表中的所有消息,还是ACK列表中的最后一条消息就够了?提前致谢!


public class MyMessageListener implements ChannelAwareBatchMessageListener {

@Override
public void onMessageBatch(List<Message> messages,Channel channel){

//Do something......
    
//option 1    
 messages.forEach(msg-> channel.basicAck(msg.getMessageProperties().getDeliveryTag(),true); 

//option 2
channel.basicAck( messages.get(messages.size()-1).getMessageProperties().getDeliveryTag(),true);
        
   }

}

解决方法

这取决于您的业务案例,一般来说,确认所有消息会增加网络流量,因此您的消息吞吐量会下降。

第二种选择是一种实用的方法,前提是有可能丢失一些可能尚未传递的中间消息,并且稍后的消息已传递并得到确认,在这种情况下,未传递的消息也将被确认。

因此,这是一个设计决策,由您的消息负载的敏感性决定。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。