代码之家  ›  专栏  ›  技术社区  ›  tokyo0709

作为单独实例运行的singleton-azure函数

  •  1
  • tokyo0709  · 技术社区  · 6 年前

    我们有一个Azure函数,它应该同时处理多个服务总线触发器,我假设发生的情况是它被拆分到多个实例中,这会导致我们端部出现一些并发问题。

    我们需要我们的函数充当一个单例,这样我们就可以一次处理一个请求,而不会发生任何冲突。从我们在本文中的研究来看( https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to#singleton-attribute )我们应该能够做到这一点。

    我们的功能如下:

    [Microsoft.Azure.WebJobs.Singleton(Mode = SingletonMode.Listener)]
    [FunctionName("AccountCreatedSubscriber")]
    public static void Run([ServiceBusTrigger("accountscontacts-account-created", "license-keys", Connection = "FBISEventBus")]BrokeredMessage message, ILogger log)
    {
        log.LogInformation($"{{ Message received from accountscontacts-account-created topic }}");
    
        // Do Work
        log.LogInformation($"{{ Message sent to account creation handler }}");
    }
    

    为了备份,我们在host.json文件中也有这个文件,

    {
      "serviceBus": { "maxConcurrentCalls": 1 }
    }
    

    但不管什么原因,我们的函数仍然是并行的。有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jerry Liu Phantom    6 年前
    1. 如果您的功能在消费计划中,请设置 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 1 在里面 Application settings .

    2. 检查门户中的Azure函数运行时版本(平台功能>函数应用程序设置)。如果是2,我们需要在 host.json 如下所示。

      {
          "version": "2.0",
          "extensions": {
              "serviceBus": {
                  "messageHandlerOptions": {
                     "maxConcurrentCalls": 1
                  }
              }
          }
      }