【发布时间】:2013-05-16 22:34:32
【问题描述】:
我目前正在使用 .scheduledEnqueueTime 排队要在未来某个日期运行的消息。有时消息正在中继有关更改的数据或被删除的事件,当发生这种情况时,我需要删除消息。我在搜索时看不到如何找到它或与它互动,有人能指出我正确的方向吗?
【问题讨论】:
-
FWIW 我正在使用表条目来软删除它们,然后如果设置了软删除标志就不要对它们采取行动。
标签: azure servicebus
我目前正在使用 .scheduledEnqueueTime 排队要在未来某个日期运行的消息。有时消息正在中继有关更改的数据或被删除的事件,当发生这种情况时,我需要删除消息。我在搜索时看不到如何找到它或与它互动,有人能指出我正确的方向吗?
【问题讨论】:
标签: azure servicebus
您说得对,Natahan 目前无法从服务总线队列中取消(删除)预定消息。我们已经让其他客户遇到了这种情况,并将在未来的里程碑中添加此功能。与此同时,我看到人们在Session state 中使用跟踪某个工作项的进度模式,当计划的消息出现时,他们会检查会话状态,如果它已经完成/解决,那么就忽略该消息(也许然后取消会话状态)。
【讨论】:
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();
}
【讨论】: