Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 何时使用Amazon SQS的延迟队列功能?_Amazon Web Services_Amazon Sqs - Fatal编程技术网

Amazon web services 何时使用Amazon SQS的延迟队列功能?

Amazon web services 何时使用Amazon SQS的延迟队列功能?,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我理解AmazonSQS中延迟队列的概念,但我想知道它为什么有用。 SQS延迟队列的用途是什么? 谢谢我能想到的一个用例是在分布式应用程序中的使用,它最终具有一致性语义。使用该消息的系统可能具有类似于要可用的关联标识符的依赖性,因此可能需要等待一定的保证持续时间才能看到关联数据。在这种情况下,消息延迟一定时间是有意义的 和你一样,我对延迟队列的用例感到困惑,直到我在自己的工作中偶然发现了一个。我的应用程序需要有一个内部队列,每个项目在每次检查完成之间至少等待一分钟 因此,我不必管理每个对象的“上

我理解AmazonSQS中延迟队列的概念,但我想知道它为什么有用。 SQS延迟队列的用途是什么?
谢谢

我能想到的一个用例是在分布式应用程序中的使用,它最终具有一致性语义。使用该消息的系统可能具有类似于要可用的关联标识符的依赖性,因此可能需要等待一定的保证持续时间才能看到关联数据。在这种情况下,消息延迟一定时间是有意义的

和你一样,我对延迟队列的用例感到困惑,直到我在自己的工作中偶然发现了一个。我的应用程序需要有一个内部队列,每个项目在每次检查完成之间至少等待一分钟


因此,我不必管理每个对象的“上次检查时间”,而是将对象的ID以60秒的延迟时间插入SQS队列消息中,然后我的主循环就变成了一个简单的针对队列的长轮询。

我脑子里有几个:

  • 电子邮件-假设您有一个服务,可以发送由队列消息触发的提醒电子邮件。在这种情况下,您必须延迟消息排队

  • 竞争条件-交付延迟可用于克服分布式系统中的竞争条件。例如,服务可以在表中插入一行,并向其他服务发送有关其可用性的消息。他们还不能使用新条目,因此您必须延迟发布SQS消息

  • 处理重试—有时,如果消息失败,您希望通过指数退避重试。这需要以更长的延迟重新排队消息

  • 我已经构建了一套API来简化队列消息调度。您可以调用我们的API来安排队列消息、取消、编辑和检查此类消息的状态。把它想象成一个调度微服务

    如果您正在寻找解决方案,请告诉我。我以前在工作中构建过这些调度器,用于大规模发送电子邮件,因此我有类似用例的经验。

    一个用例可以是:

    想象一个时间关键的表达式,比如一个预定的股票交易订单

    如果您的一个系统正在获取未来60分钟内计划的所有订单,并将它们放入队列(将由另一个子系统获取)

    若您直接发送这些订单,那个么它们将立即在队列中可见,并且将根据它们的订单进行处理

    但最有可能的是,它们不会在客户想要的确切时间(小时:分钟:秒)内执行,这将影响结果


    所以为了解决这个问题,第一个子系统将做什么,它将增加延迟秒数(当前时间和执行时间之间的差异),这样消息只有在经过这么长的延迟后或在用户需要的确切时间才会可见。

    什么是“关联标识符”?另一个用途是处理具有速率限制的API。我想延迟消息,直到再次有一些可用资源。如果你想聊天,我随时可以在schedulerapi@gmail.com也