AWS SQS JMS确认
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS SQS JMS确认相关的知识,希望对你有一定的参考价值。
我使用默认的MessageListener连接到SQS队列。我想跟踪并重试具有异常的消息。所以我使用的是DUPS_OK_ACKNOWLEDGEMENT模式。在这种情况下,如果我正在确认一条消息,它将确认队列中的所有消息。
如何使每个消息确认工作,并重试有异常的消息?
public class MyListener implements MessageListener {
public void onMessage(Message message) {
try{
//my logic
message.acknowledge();
}catch(Exception e){
}
}}
答案
DUPS_OK_ACKNOWLEDGE MINT是一种延迟确认模式,它在自上一批确认后经过一定时间间隔后批量确认消息。
如果要单独确认每条消息,则应使用CLIENT_ACKNOWLEDGEMENT模式。具有Client_Acknowledge模式的Spring消息侦听器将在客户端调用message.acknowledge()时确认该消息。
但是,如果在成功执行消息之后,消费者没有从客户端找到任何确认,则spring假定执行成功并确认该消息。
如果在任何时候,消费者在处理消息时遇到异常,则Spring侦听器需要知道发生了一些异常,以便将消息重新发送到队列以供另一个消费者线程获取它。如果您正在捕获异常,则spring假定所有内容都已处理并且执行顺利,因此会确认消息。
Spring消息监听器只允许从onMessage监听器抛出JMS异常。捕获自定义异常并从侦听器抛出JMS异常(在记录错误以供将来参考之后)将允许您重新传递消息。
以上是关于AWS SQS JMS确认的主要内容,如果未能解决你的问题,请参考以下文章