我正在开发一个需要接受排队请求的程序,我想使用SQS作为我的队列。我的应用程序不关心消息顺序,但 需要能够“关闭”队列以接收新事件,同时耗尽剩余消息。
例如,假设我有一个包含以下消息的SQS队列Q
:
Q = [ A, B, C ]
我想对Q
做点什么,这样如果我尝试添加新消息D
,它就会失败,但我仍然会收到消息A
,{{1 }和B
。同样,我不关心订单 - C
,C
,A
很好 - 我只需要一种方法来阻止添加新邮件。这样,只要我继续处理“关闭”队列中的消息,我保证在将来的某个时候将其消耗掉。
从表面上看,SQS似乎并不支持“开箱即用”的功能。但是,我似乎可以使用B
来禁止相关帐户的队列中的RemovePermission
和SendMessage
。
对于那些过去使用过SQS和SendMessageBatch
的人:这种方法是否合理?
答案 0 :(得分:1)
是的,我想你回答了自己的问题。这正是我要做的。删除Send *权限。没有“暂停”队列的概念,也没有办法阻止网络层的访问。所以你被删除了权限。当然,写入队列的任何客户端都会抛出错误,但我认为你正在计划这个。
答案 1 :(得分:1)
另一个想法是在系统中进行一些配置,告诉生产者在哪里发送新消息。这可以让你关闭"旧的队列,只需知道所有客户端都遵循规则并写入新队列,而不会弄乱权限。