我们有一个 Azure 函数,该函数应该同时处理多个服务总线触发器,我认为正在发生的情况是,它被拆分到多个实例中,这导致了我们端的一些并发问题。
我们需要我们的函数充当单例,这样我们就可以一次处理一个请求而不会发生任何冲突。根据我们在本文中的研究(https://learn.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 }
}
但无论出于何种原因,我们的功能仍然并行运行。有任何想法吗?
如果您的功能在消耗计划中,请设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
to 1
in 应用程序设置.
-
在门户中检查您的 Azure Function 运行时版本(平台功能 > Function 应用设置)。如果是~2,我们需要修改服务总线设置主机.json如下。
{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"maxConcurrentCalls": 1
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)