【问题标题】:Visibility timeout in Amazon SQS not workingAmazon SQS 中的可见性超时不起作用
【发布时间】:2021-06-01 05:07:14
【问题描述】:

如何配置可见性超时,以便可以再次读取 SQS 中的消息?

我将 Amazon SQS 作为消息队列。多个应用程序正在发送消息。我现在正在使用 Spring 侦听器读取队列中的消息,如下所示:

    public DefaultMessageListenerContainer jmsListenerContainer() {
        
        SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()  
                .withAWSCredentialsProvider(new DefaultAWSCredentialsProviderChain())
                .withEndpoint(environment.getProperty("aws_sqs_url"))
                .withAWSCredentialsProvider(awsCredentialsProvider)
                .withNumberOfMessagesToPrefetch(10).build();
        
        DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
        dmlc.setConnectionFactory(sqsConnectionFactory);
        dmlc.setDestinationName(environment.getProperty("aws_sqs_queue"));
        dmlc.setMessageListener(queueListener);
                
        return dmlc;
    }

queueListener 类实现了javax.jms.MessageListener,它进一步使用了onMessage() 方法。

我还配置了一个调度程序,在一段时间后再次读取队列。它使用receiveMessage()com.amazonaws.services.sqs.AmazonSQS

一旦消息到达队列,侦听器就会读取消息。我想在一段时间后再次阅读该消息,即通过调度程序,但是一旦听众阅读了一条消息,它就不会变得可见或再次阅读。根据 Amazon 的 SQS 开发人员指南,默认可见性超时为 30 秒,但该消息即使在 30 秒后也不会变得可见。我尝试在 SQS QUEUE PARAMETER CONSOLE 中设置自定义可见性超时,但它不起作用。

关于信息,没有人从队列中删除消息。

【问题讨论】:

  • 为什么您要故意再次阅读同一条消息?隐形超时旨在处理在处理过程中失败的消息(例如,工作人员在完成任务之前死亡)。您需要多次阅读同一条消息的特定用例是什么?
  • 如果消息读取和处理成功,我将从队列中删除它。但是,如果处理消息或线程/服务器在执行过程中被杀死,即在手动触发删除消息之前,我想再次阅读消息以再次处理。
  • 好。这听起来像是正常的过程。根据下面贾斯汀的回答,由于您使用的库,该消息听起来像是自动删除。

标签: amazon-web-services jms message-queue amazon-sqs spring-jms


【解决方案1】:

我对 Amazon SQS 只略知一二,但我可以说,通常在消息传递用例中,当消费者接收并确认消息时,该消息会从队列。鉴于您的 Spring 应用程序正在接收消息,我怀疑它也在确认消息,因此将其从队列中删除,这会阻止您的调度程序稍后接收它。注意Spring的DefaultMessageListenerContainer默认使用JMS的AUTO_ACKNOWLEDGE模式。

This documentation from Amazon 实质上表明,如果一条消息在 JMS 上下文中得到确认,则该消息将“从底层 Amazon SQS 队列中删除”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2013-07-25
    • 2021-12-01
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多