Azure 服务总线队列:我可以管理/取消预定的消息吗?

Cal*_*m M 4 azure azureservicebus azure-servicebus-queues

如果我将来使用这样的方式安排消息:

d = datetime.utcnow() + timedelta(minutes=5)
task = {"some": "object"}

sbs.send_queue_message(
    qn,
    Message(
        task, 
        broker_properties={'ScheduledEnqueueTimeUtc': d}
    )
)
Run Code Online (Sandbox Code Playgroud)

那么有没有一种方法可以查看/删除已安排的消息?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 -添加消息/

基本上我需要能够安排稍后排队的消息,但是可以取消。理想情况下,我还希望能够查看所有未来的计划任务,但能够仅存储可用于稍后删除排队消息的 id 就足够了。

Azure UI 也显示了活动/计划消息的数量,这似乎表明应该有某种方法可以查看这些计划消息!

队列存储会更好吗?或者服务总线是否有一些可行的方法?ScheduledEnqueueTimeUtc似乎比队列存储中的可见性超时更灵活,所以如果可以的话,坚持下去会很好。

Sea*_*man 6

是的,这是可能的。

不知道 NodeJS 客户端是否支持它,但是对于 C# 客户端,有一种替代ScheduledEnqueueTimeUtc方法可以替代我在此处描述的方法。使用QueueClient.ScheduleMessageAsync()您可以发送预定消息并获取SequenceNumber. 然后可用于在任何时间点使用QueueClient.CancelScheduledMessageAsync(sequenceNumber).