【问题标题】:Azure Function Service Bus trigger fires more times than messages in the queueAzure Function Service Bus 触发器的触发次数多于队列中的消息
【发布时间】:2020-11-18 20:39:35
【问题描述】:

我有两个服务总线队列和 Azure 服务总线队列触发器。

该函数从队列中读取 1000 条消息并将它们转发给另一个(用于测试) 发布到 Azure(计划消费)时,即使队列中只有 1000 条消息,我也会获得 1030 多个函数命中。我认为这与函数实例的数量有关。

问:如何对 1 个函数实例只处理 1 个唯一消息一次?

[FunctionName("Function1")]
        public static async Task Run([ServiceBusTrigger("export-queue",
        Connection = "Connection")]
        string myQueueItem, ILogger log)
        {
            log.LogInformation($"Message: {myQueueItem}:{DateTime.Now}");
            Thread.Sleep(2000);
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            var message = new Message(Encoding.UTF8.GetBytes(myQueueItem));
            await queueClient.SendAsync(message);
            await queueClient.CloseAsync();
        }

【问题讨论】:

    标签: azure-functions azureservicebus azure-servicebus-queues azure-function-app azure-servicebus-topics


    【解决方案1】:

    默认情况下,ServiceBusTrigger 使用的是PeekLock mode。这在技术上意味着如果消息锁已被锁定,则可以多次处理消息。这可以解释为什么对于 1,000 条传入消息,您会获得超过 1,000 次调用。

    另一个角度是函数执行的持续时间与预取大小相结合。如果执行时间长到足以失去对某些预取消息的锁定,请减少prefetch

    另外,考虑以您知道消息被处理至少一次而不是完全一次的方式设计您的解决方案。

    【讨论】:

      【解决方案2】:

      它对我有用。

      为你的 host.json 添加扩展:

      "extensions": {
      
          "serviceBus": {
            "prefetchCount": 1,
            "messageHandlerOptions": {
              "autoComplete": true,
              "maxConcurrentCalls": 1,
              "maxAutoRenewDuration": "00:05:00"
            },
            "sessionHandlerOptions": {
              "autoComplete": true,
              "messageWaitTimeout": "00:00:30",
              "maxAutoRenewDuration": "00:55:00",
              "maxConcurrentSessions": 10
            }
          }
        }
      

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-26
        相关资源
        最近更新 更多