创建将来要处理的Amazon SNS消息

时间:2014-12-01 10:54:40

标签: java amazon-web-services event-handling amazon-sqs amazon-sns

在过去的几年里,我们使用自己的RM应用程序来处理与我们的应用程序相关的事件。这可以通过每隔几分钟轮询一个数据库表,查找之前有截止日期但尚未处理的任何行。

我们目前正在向SNS过渡,SQS工作人员层正在处理它们。这种方法的问题是我们将来不能约会我们的消息。我们的应用程序有时会有一些事件,我们不希望在一周之后处理这些事件。

我们可以采用哪些设计方法,替代服务,巧妙的技巧来实现这一目标?

一个解决方案是保持我们现有的应用程序在简化的水平上运行,所以它只是在它们到期时发送SNS通知,但这个项目的目的是试图取消我们现有的应用程序。

3 个答案:

答案 0 :(得分:2)

数据库方法最明智,小心每行只处理一次。

亚马逊简单通知服务(SNS)旨在立即发送通知。延迟发送没有任何功能(尽管如果失败,会重试某些通知类型)。

亚马逊简单队列服务(SQS)确实有延迟功能,但最多只有15分钟 - 如果您需要在处理邮件之前做一些工作,例如复制,这非常有用与Amazon S3相关的数据。

鉴于你的要求是等到未来的某个任意时间(实际上就像一个调度系统),你可以启动一个进程并告诉它在一段时间内休眠(如果系统重启,一个坏主意) ,或继续从数据库进行轮询。

如果所有工作都安排在遥远的未来(例如至少一小时之外),理论上你只需要每小时轮询数据一次,以便检索最早的预定时间。

答案 1 :(得分:1)

一周可能太长,因为SQS邮件保留本身只有15天。如果你可以保留15天的最大保留期,那么一个想法就是在每次收到消息时保持更改消息的可见性,直到它准备好进行处理。允许的最大可见性超时为12小时。有关可见性超时和更改它们的API的更多信息,

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

答案 2 :(得分:0)

我发现了这种方法:https://github.com/alestic/aws-sns-delayed。基本上,您可以在其中使用等待步骤的步骤功能