我想在SQS上发布一条消息,并在几个小时后处理该消息。
如何根据某些属性安排消息传递或从SQS中选择消息?
我已经实现了SQS使用者,但是我正在接收来自SQS队列的每条消息。可以在SQS上实现类似的功能吗?我当时想接收每条消息,如果还没有时间处理该消息,则再次发送到队列。
答案 0 :(得分:1)
在SQS中有一个称为Delay Queues的功能,其中,如果您在队列上设置了延迟,则只有在延迟持续时间过去之后,消费者才能使用放入队列的任何消息。但是,您可以设置的最大延迟为15分钟,如果您希望延迟几个小时,则可能无法直接使用。
另一个选项是为消息设置可见性超时,使其高于所需的延迟时间。然后,当您阅读消息时,可以获得消息时间戳。如果还有一些时间需要延迟,那么您可以在剩余时间内让消费者保持睡眠状态,并在唤醒后可以处理该消息。但是,这不是推荐的方法,并且效率极低,因为您的线程被阻塞了。实际上,如果延迟还剩下一些时间,那么您可以做的只是将消息保存在本地列表/数组中,然后检查其他消息并在延迟后处理该消息。但这一切都需要将整个逻辑保留在您的代码中,并且您无法从AWS获得任何现成的功能