【问题标题】:Is there an elegant way to post messages to AWS SQS with visibility delay of longer than 15 minutes?是否有一种优雅的方式可以将消息发布到 AWS SQS,且可见性延迟超过 15 分钟?
【发布时间】:2011-12-08 14:50:40
【问题描述】:

在 Amazon Web Services 中,他们的队列允许您以最长 15 分钟的可见性延迟发布消息。如果我不想在 6 个月内看到消息怎么办?

我正在尝试为投票/推送问题提出一个优雅的解决方案。我可以编写代码每隔几秒轮询一次 SQS(或数据库),检查准备好可见的消息,然后将它们移动到“可见队列”或类似的东西。我希望有一种更简单、更可靠的方法可以让消息在很远的将来在队列中变得可见,而不必担心我的轮询应用程序一直都能正常工作。

我没有与 AWS、SQS 或其中任何一个结婚,但我更愿意找到一个稳定、可靠并且会在很远的将来触发事件而无需担心检查的云友好型解决方案每天查看它的状态。

欢迎任何想法或可供我探索吠叫的替代树。

谢谢!

【问题讨论】:

    标签: timer amazon-web-services amazon-sqs


    【解决方案1】:

    听起来您可能误解了能见度延迟。其目的是确保轮询应用程序不会多次从队列中拉出同一个项目。

    换句话说,如果轮询系统有一组机器从队列中读取所有一次。

    以下是相关文档:

    http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#AboutVT

    ...特别是与我的评论相关的句子是:

    “在组件收到消息后,消息仍在队列中。但是,您不希望系统中的其他组件再次接收和处理消息。因此,Amazon SQS 会通过可见性超时阻止它们,这是一段 Amazon SQS 阻止其他消费组件接收和处理该消息的时间段。”

    您应该能够将 SQS 用于您的目的,因为您可以根据需要将项目留在队列中。

    【讨论】:

    • 嘿 Jay- 抱歉,我的问题不太清楚。我指的不是消息可见性,而是延迟队列,其中消息在一段时间内对任何人都不可见(并不是因为它们已被其他进程签出)。这可以防止消息在用户确定的时间段内被任何东西处理。这是一个链接:docs.amazonwebservices.com/AWSSimpleQueueService/latest/…
    • 你可能想看看iron.io,他们有一些看起来很适合你想做的新产品。
    【解决方案2】:

    7 年后,亚马逊仍然不支持你需要的功能!

    您可以通过以下两种方式使其工作:

    • 消息在其 message_attributes 中包含传递目标日期时间,并让使用队列消息的工作人员删除并重新创建在其目标之前使用的任何消息,延迟 = max(0, min(secs_until_target_datetime, 900)) ;这将允许您有效地为任意未来时间安排消息;

    或者,

    • (频率稍低且代价高:)同样,如果尚未处理消息,则重新创建它并将其可见性超时更改为 timeout = max(0, min(secs_until_target_datetime, 43200))

    使用可见性超时的缺点是任何读取都会重新触发它。

    【讨论】:

      【解决方案3】:

      自 2016 年 12 月 1 日以来,直接的 AWS 解决方案成为可能:AWS Step Functions

      每次执行都可以last/idle up to one year,在转换之间保持状态,并且在等待期间不会花费您任何钱。

      【讨论】:

        猜你喜欢
        • 2016-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 2019-08-24
        • 2020-11-13
        • 2021-10-11
        • 2019-11-07
        相关资源
        最近更新 更多