Как сделать так, чтобы дублирующее сообщение не вставлялось в очередь служебной шины во время обработки 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 есть образец, иллюстрирующий эту функцию здесь.

Другие вопросы по тегам