azure - 如何防止在 WebJob 处理时重复消息不插入到服务总线队列中?

标签 azure message-queue azureservicebus azure-servicebus-queues brokeredmessage

我想确保如果队列中已存在相同的消息,则在 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 获取触发器。我给了 sleep 时间 150000 毫秒,但在此之前我尝试将相同的消息插入到相同的队列中,但由于重复的消息,不应插入该队列。

我试过MSDN但它在 Azure Webjob 中不起作用。

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);
        }

最佳答案

重复消息检测基于 BrokeredMessageMessageId。 Azure 产品团队有一个示例说明此功能 here .

关于azure - 如何防止在 WebJob 处理时重复消息不插入到服务总线队列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28690002/

相关文章:

linux - 如何从浏览器或 Azure Functions 调用远程计算机上的 Shell 脚本

json - 如何使用ARM模板创建多个服务总线主题?

c# - Azure Functions 服务总线触发器 : getting Serialization exception when trying to bind to custom class

azure - Terraform 导入 - 资源标签重要吗?

python - Azure 认知搜索 :

java - 为 Azure 存储访问生成 SAS

java - 通过超时优雅地停止周期性消费者队列的优雅方式

c# - 重新排队后保持交货顺序

rest - 带队列的长时间运行的 REST API

c# - 从 QueueClient.OnMessage 回调中获取队列名称