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