2017-07-28 67 views
0

我正在尝试为Azure服务总线队列或主题安排消息的最佳方式,同时保留打开选项以立即发送消息而不是预定消息。如果我尝试在第一封邮件的预定时间或之后发送替换邮件,我想确保自己能够防止创建重复邮件。当您尝试取消已排入队列的预定Azure服务总线消息时会发生什么情况?

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

+0

当你尝试了什么事它? – mjwills

+0

我将在下周尝试它。只是想知道有没有人知道,因为我没有找到有关它的文档。 –

回答

1

根据您的描述,我找到了一个博客(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); 

我登录到蔚蓝的门户网站,并检查活动消息COUNT调度消息COUNT。它变得活跃之前,我可以取消计划的消息,但如果我通过sequenceNumber取消计划的消息调度消息被激活后,那么我将如下检索异常:

enter image description here

+0

感谢您检查Bruce!因此,如果我理解正确,那么当您在队列中激活并尝试取消邮件时,您看到引发的异常吗? –

+0

是的,我在队列消息被使用之前调用了取消操作。如果预定的信息已被激活,则无论该信息是否已被使用,都不能取消该信息。 –

相关问题