AWS SQS JMS确认

问题描述 投票:0回答:1

我使用默认的MessageListener连接到SQS队列。我想跟踪并重试具有异常的消息。所以我使用的是DUPS_OK_ACKNOWLEDGEMENT模式。在这种情况下,如果我正在确认一条消息,它将确认队列中的所有消息。

如何使每个消息确认工作,并重试有异常的消息?

public class MyListener implements MessageListener {
    public void onMessage(Message message) {
    try{
        //my logic
        message.acknowledge();
    }catch(Exception e){
    }
}}
amazon-web-services queue jms amazon-sqs
1个回答
0
投票

DUPS_OK_ACKNOWLEDGE MINT是一种延迟确认模式,它在自上一批确认后经过一定时间间隔后批量确认消息。

如果要单独确认每条消息,则应使用CLIENT_ACKNOWLEDGEMENT模式。具有Client_Acknowledge模式的Spring消息侦听器将在客户端调用message.acknowledge()时确认该消息。

但是,如果在成功执行消息之后,消费者没有从客户端找到任何确认,则spring假定执行成功并确认该消息。

如果在任何时候,消费者在处理消息时遇到异常,则Spring侦听器需要知道发生了一些异常,以便将消息重新发送到队列以供另一个消费者线程获取它。如果您正在捕获异常,则spring假定所有内容都已处理并且执行顺利,因此会确认消息。

Spring消息监听器只允许从onMessage监听器抛出JMS异常。捕获自定义异常并从侦听器抛出JMS异常(在记录错误以供将来参考之后)将允许您重新传递消息。

© www.soinside.com 2019 - 2024. All rights reserved.