有没有办法从Azure中的服务总线队列中删除待处理的消息?

时间:2013-05-16 22:34:33

标签: azure servicebus

我目前正在使用.scheduledEnqueueTime对将来运行的消息进行排队。有时,消息正在传递有关更改的数据或被删除的事件,当发生这种情况时,我需要删除该消息。当我搜索时,我看不到如何找到它或与之交互,有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

你是对的Natahan,目前无法从服务总线队列中取消(删除)预定的消息。我们让其他客户遇到了这种情况,并将在未来的里程碑中添加此功能。与此同时,我看到人们在Session state中使用跟踪某个工作项目进度的模式,当预定的消息显示时,他们会检查会话状态,如果已经完成/已解决,则忽略该消息(然后可能会使会话状态无效)。

答案 1 :(得分:1)

ASB允许安排一条消息并按需取消它,甚至在它变得可见/可用之前。查找完整的博客here

另一种解决方案是使用“ Microsoft.ServiceBus.Messaging”并按入队时间清除消息。接收邮件,用ScheduledEnqueueTime过滤,并在特定时间将邮件放入队列后进行清除。

Microsoft.ServiceBus.Messaging;
MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(connectionString);
var queueClient = messagingFactory.CreateQueueClient(resourceName, ReceiveMode.PeekLock);
var client = messagingFactory.CreateMessageReceiver(resourceName, ReceiveMode.PeekLock);
BrokeredMessage message = client.Receive();

if (message.EnqueuedTimeUtc < MessageEnqueuedDateTime)
{
     message.Complete(); 
}