如何防止在 WebJob 处理时不将重复消息插入到服务总线队列中?
How do I prevent duplicate message not to be inserted in Service Bus Queue while WebJob processing?
我想确定如果队列中已经存在相同的消息,那么在 webjob
处理第一条消息时应该忽略第二条消息(不插入队列)。
我尝试了以下代码:
var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.QueueExists(queueName))
{
namespaceManager.CreateQueue(new QueueDescription(queueName) { RequiresDuplicateDetection = true });
}
属性 RequiresDuplicateDetection
应确保消息重复。
// Get messageFactory for runtime operation
MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(connectionString);
QueueClient queueClient = messagingFactory.CreateQueueClient("TestQueue");
BrokeredMessage message = new BrokeredMessage();
message.MessageId = "Localization";
queueClient.Send(message);
但是 webjob
每个 messageId 都会触发。我给了 150000 毫秒的休眠时间,但在此之前我尝试将相同的消息插入到相同的队列,由于消息重复,不应插入。
我试过 MSDN 但它在 Azure Webjob 中不起作用。
网络作业代码:
public static void ProcessQueueMessage([ServiceBusTrigger("TestQueue")] BrokeredMessage message, TextWriter log)
{
log.WriteLine("Webjob Start" + message.MessageId + DateTime.Now);
Thread.Sleep(150000);
log.WriteLine("Webjob End" + message.MessageId + DateTime.Now);
}
重复邮件检测基于 BrokeredMessage
的 MessageId
。 Azure 产品团队有一个说明此功能的示例 here。
我想确定如果队列中已经存在相同的消息,那么在 webjob
处理第一条消息时应该忽略第二条消息(不插入队列)。
我尝试了以下代码:
var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.QueueExists(queueName))
{
namespaceManager.CreateQueue(new QueueDescription(queueName) { RequiresDuplicateDetection = true });
}
属性 RequiresDuplicateDetection
应确保消息重复。
// Get messageFactory for runtime operation
MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(connectionString);
QueueClient queueClient = messagingFactory.CreateQueueClient("TestQueue");
BrokeredMessage message = new BrokeredMessage();
message.MessageId = "Localization";
queueClient.Send(message);
但是 webjob
每个 messageId 都会触发。我给了 150000 毫秒的休眠时间,但在此之前我尝试将相同的消息插入到相同的队列,由于消息重复,不应插入。
我试过 MSDN 但它在 Azure Webjob 中不起作用。
网络作业代码:
public static void ProcessQueueMessage([ServiceBusTrigger("TestQueue")] BrokeredMessage message, TextWriter log)
{
log.WriteLine("Webjob Start" + message.MessageId + DateTime.Now);
Thread.Sleep(150000);
log.WriteLine("Webjob End" + message.MessageId + DateTime.Now);
}
重复邮件检测基于 BrokeredMessage
的 MessageId
。 Azure 产品团队有一个说明此功能的示例 here。