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确认的主要内容,如果未能解决你的问题,请参考以下文章

设置手动确认 SQS 消息的 Spring Cloud AWS 问题

SQS 队列中的确认消息

AWS - 从EC2连接到SQS

创建 AWS SQS 队列

使用线程池的 JMS 侦听器

AWS Cognito Post-Confirmation [已结束]