Как сделать так, чтобы дублирующее сообщение не вставлялось в очередь служебной шины во время обработки WebJob?
Я хочу быть уверен, что если такое же сообщение уже присутствует в очереди, то второе сообщение должно игнорироваться. (Не вставляется в очередь), в то время как 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
получает trigger for every messageId
, я дал sleep time 150000 MILI SEC
но до этого я пытался insert same message to same queue
, который не должен быть вставлен из-за дублирования сообщения.
пробовал MSDN LINK MSDN, но он не работает в Azure Webjob Кто-нибудь может мне помочь в этом?
WebJob Code :
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);
}
1 ответ
Обнаружение дублирующихся сообщений основано на MessageId
из BrokeredMessage
, У команды разработчиков Azure есть образец, иллюстрирующий эту функцию здесь.