【问题标题】:Is there a way to delete a pending message from a Service Bus Queue in Azure?有没有办法从 Azure 中的服务总线队列中删除待处理的消息?
【发布时间】:2013-05-16 22:34:32
【问题描述】:

我目前正在使用 .scheduledEnqueueTime 排队要在未来某个日期运行的消息。有时消息正在中继有关更改的数据或被删除的事件,当发生这种情况时,我需要删除消息。我在搜索时看不到如何找到它或与它互动,有人能指出我正确的方向吗?

【问题讨论】:

  • FWIW 我正在使用表条目来软删除它们,然后如果设置了软删除标志就不要对它们采取行动。

标签: azure servicebus


【解决方案1】:

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

【讨论】:

  • 只是想知道取消预定消息是否已经实现?或者这个解决方法仍然适用?
  • 2016,那个“未来的里程碑”呢? :) 似乎找不到这方面的信息。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2017-01-16
    • 1970-01-01
    • 2019-07-23
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多