当您尝试取消已排队的计划Azure服务总线消息时会发生什么?

时间:2017-07-28 22:43:00

标签: c# azure-servicebus-queues azure-servicebus-topics

我试图找到为Azure服务总线队列或主题安排消息的最佳方法,同时保持选项打开以立即发送消息而不是预定消息。如果我尝试在第一条消息的预定时间或之后发送替换消息,我想确保自己能够保护自己不会创建重复的消息。

如果我尝试在消息已经排队后使用CancelScheduledMessageAsync(对于QueueClient和TopicClient类)取消预定消息,会发生什么?它会抛出异常吗?

1 个答案:

答案 0 :(得分:2)

根据你的描述,我找到了一个博客(Canceling Scheduled Messages)谈论类似的问题。

  

在版本3.3.1之前,需要在显示之前取消预定的消息,这是不可能的。任何访问其值的尝试都会导致InvalidOperationException。因此,将来安排并且不再需要的任何消息都会“停留”在代理上,直到稍后。

     

使用Microsoft Azure Service Bus> = 3.3.1 QueueClientTopicClient可用于安排消息并稍后取消。

另外,我已经通过以下代码对我进行了测试:

BrokeredMessage brokerMsg= new BrokeredMessage("Hello World!!!");
long sequenceNumber = await queueClient.ScheduleMessageAsync(brokerMsg, DateTimeOffset.UtcNow.AddSeconds(30));

await Task.Delay(TimeSpan.FromMinutes(1));
// Cancel scheduled message
await queueClient.CancelScheduledMessageAsync(sequenceNumber);

我登录了azure portal并选中了有效消息计数预定留言计数。我可以在调度消息变为活动状态之前取消它,但是如果我在调度消息变为活动状态后通过sequenceNumber取消预定消息,那么我将按如下方式检索异常:

enter image description here

相关问题