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

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

如果我在消息已经入队后尝试使用CancelScheduledMessageAsync(对于QueueClient和TopicClient类)取消已调度的消息,会发生什么? 它会抛出exception吗?

根据你的描述,我发现一个博客( 取消预定消息 )谈论类似的问题。

在版本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并检查了ACTIVE MESSAGE COUNTSCHEDULED MESSAGE COUNT 。 我可以在它被激活之前取消预定的消息,但是如果我在预定的消息变为活动状态后通过sequenceNumber取消预定的消息,那么我将检索exception,如下所示:

在此处输入图像描述