有没有一种方法可以从Azure的Service Bus队列中删除待处理的消息?

8

我目前正在使用.scheduledEnqueueTime将消息排队到未来的日期运行。有时,消息中传递的数据所涉及的事件会发生更改或被删除,当发生这种情况时,我需要删除该消息。但是在搜索时,我无法找到或与其进行交互,有人能指点我方向吗?


对于此事,我正在使用表条目进行软删除,如果设置了软删除标志,就不会对其进行操作。 - Nathan C. Tresch
2个回答

4

你说得对,Natahan,目前没有办法从服务总线队列中取消(删除)已计划的消息。我们已经有其他客户遇到了这种情况,并将在未来的里程碑中添加此功能。同时,我看到有人使用跟踪某个工作项在会话状态中的进度模式,当计划的消息出现时,他们检查会话状态,如果已经完成/解决,则忽略该消息(然后可能将会话状态设置为null)。


请问取消已安排的消息功能是否已经实现?还是说这个解决方法仍然适用? - rockgecko
4
2016年,“未来的里程碑”是什么? :) 我找不到相关的信息。 - Dovydas Navickas

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(); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接