当前位置: 首页 > 知识库问答 >
问题:

Amazon SQS中的可见性超时不工作

胥诚
2023-03-14

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

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

    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()方法。

我还配置了一个调度器,在一段时间后再次读取队列。它使用com的receiveMessage()。亚马逊。服务。sqs。AmazonSQS

消息到达队列后,侦听器立即读取消息。我想在一段时间后,即通过调度程序再次读取消息,但一旦侦听器读取消息,它就不会显示或再次读取。根据亚马逊的SQS开发者指南,默认的可视性超时为30秒,但即使在30秒后,该消息也不会变得可见。我曾尝试在SQS队列参数控制台中设置自定义可见性超时,但它不起作用。

请注意,没有人从队列中删除消息。


共有1个答案

隆飞宇
2023-03-14

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

来自Amazon的这篇文档本质上说明,如果消息在JMS上下文中被确认,那么它将“从底层Amazon SQS队列中删除”

 类似资料:
  • 我对SQS非常陌生,如果我忽略了一些显而易见的事情,我很抱歉,但是有没有办法获取SQS中消息的当前可见性超时?我可以在这里看到如何更新超时可见性。但是我没有看到任何关于获取消息当前可见性超时的信息(也许你可以在收到消息时查看)。 我的用例是根据给定消息的当前可见性超时更改可见性超时。这可能吗? (注意:我知道我可以使用近似的接收时间来达到类似的效果,如果不可能获得当前可见性时间,我会走那条路)

  • 我是AWS的新手。我在这里试图理解SQS。我也看了一些培训,但我仍然不能得到一些答案那里的讨论论坛。我在这里重复我的问题。注意,我知道下面的几个问题有明显的答案,因此更多的是一种修辞。我的困惑源于这样一个事实,即我目前对这个主题的理解导致我对在明显已知的问题之后出现在我脑海中的后续问题给出了相互矛盾的答案,并且夺走了我认为我理解得很好的任何东西的信心。 如果我有一个名为MyQueue的标准队列,并

  • 我正在尝试实现新的不可见的reCaptcha,但它不起作用。 首先,事件困难我已经用“隐形”选项创建了一个新的键,在我的应用程序中更改了键,当我在控制台中查看时,我可以看到这个请求: 根据医生的说法是对的... 第二,我选择将验证码放在一个div中(根据文档这是可以的): 这是一个验证码解决方案,但不是不可见的解决方案,因为它仍然显示框。我知道我也必须使用execute函数,但由于我仍然看到框,我

  • 在使用AWS SQS时,消息的“SentTimestamp”属性是否在从队列接收后发生变化,但在可见性超时到期后没有删除并返回队列?

  • 我有自定义缓存控制器服务-CustomCacheService groupid-com.example.service Artifactid-CustomCacheService groupid-com.example.processor Artifactid-QueryCustomCache groupid-com.example.processor artifactid-loadcustomc

  • 我有一个,希望在用户滚动时设置文本并更改的可见性。在用户停止滚动后,应该显示一秒钟,然后停止。为此,我有一个。我的代码如下所示: 代码运行得很好,我只是在想,如果我不应该在中做那么多事情,因为旧的手机可能会有这样的问题。的问题是,即使不需要也会调用它。