1

我想确定如果队列中已经存在相同的消息,那么在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);
        }
4

1 回答 1

2

重复消息检测基于MessageId. Azure 产品团队在此处BrokeredMessage提供了一个示例来说明此功能。

于 2015-02-24T11:10:31.360 回答