我试图找到为Azure服务总线队列或主题安排消息的最佳方法,同时保持选项打开以立即发送消息而不是预定消息。如果我尝试在第一条消息的预定时间或之后发送替换消息,我想确保自己能够保护自己不会创建重复的消息。
如果我尝试在消息已经排队后使用CancelScheduledMessageAsync(对于QueueClient和TopicClient类)取消预定消息,会发生什么?它会抛出异常吗?
答案 0 :(得分:2)
根据你的描述,我找到了一个博客(Canceling Scheduled Messages)谈论类似的问题。
在版本3.3.1之前,需要在显示之前取消预定的消息,这是不可能的。任何访问其值的尝试都会导致
InvalidOperationException
。因此,将来安排并且不再需要的任何消息都会“停留”在代理上,直到稍后。使用Microsoft Azure Service Bus> = 3.3.1
QueueClient
或TopicClient
可用于安排消息并稍后取消。
另外,我已经通过以下代码对我进行了测试:
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
取消预定消息,那么我将按如下方式检索异常: