如果我将来使用这样的方式安排消息:
d = datetime.utcnow() + timedelta(minutes=5)
task = {"some": "object"}
sbs.send_queue_message(
qn,
Message(
task,
broker_properties={'ScheduledEnqueueTimeUtc': d}
)
)
那么有没有办法可以查看/删除已经预定的消息呢? send_queue_message
不返回任何内容,并且 receive_queue_message
可以理解的是,它不会返回计划稍后排队的项目 - 所以我无法将其传递给 delete_queue_message
例如。
Azure 团队似乎意识到了这个用例,因为存储队列似乎具有类似以下功能:https://azure.microsoft.com/en-gb/blog/azure-storage-queues-new-feature-pop-receipt-on-add-message/
基本上,我需要能够安排一条消息稍后排队,但可以取消。理想情况下,我还希望能够查看所有 future 的计划任务,但能够仅存储可用于稍后删除排队消息的 ID 就足够了。
Azure UI 也显示事件/计划消息的计数,这似乎表明应该有某种方法来查看这些计划消息!
队列存储对此会更好吗?或者服务总线有一些可能有效的方法吗? ScheduledEnqueueTimeUtc
似乎比队列存储中的可见性超时更灵活,因此如果可以的话,坚持使用它会很好。
最佳答案
是的,这是可能的。
不知道 NodeJS 客户端是否支持它,但对于 C# 客户端,有一种替代我描述的 ScheduledEnqueueTimeUtc
方法 here 。使用QueueClient.ScheduleMessageAsync()
,您可以发送计划消息并获取SequenceNumber
。然后可以使用 QueueClient.CancelScheduledMessageAsync(sequenceNumber) 在任何时间点取消消息。
关于Azure服务总线队列: Can I manage/cancel scheduled messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333654/