0

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

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

4

1 回答 1

2

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

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

使用Microsoft Azure 服务总线>= 3.3.1QueueClientTopicClient可用于安排消息并稍后取消。

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

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 门户并检查了ACTIVE MESSAGE COUNTSCHEDULED MESSAGE COUNT。我可以在预定消息激活之前取消预定消息,但是如果我在sequenceNumber预定消息激活后通过 取消预定消息,那么我将检索异常如下:

在此处输入图像描述

于 2017-07-31T07:16:25.510 回答