我有一个时间触发的 Azure 函数部署在多个区域中,我希望在它们之间具有单例行为。例如,如果这些区域是美国西部和欧洲中部,我希望每次只运行其中一个区域。这能实现吗?
As the 文档 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer#scale-out说,TimeTrigger 隐式使用 Singleton 属性来确保每个主机仅运行一个函数实例,从而涵盖了这一方面。
为了在所有区域具有相同的行为,我尝试使用具有以下参数的 Singleton:
[Singleton(Account = "myAccount", Mode = SingletonMode.Listener)]
我通过复制 C# 解决方案并运行这两个项目在本地进行了测试。显示以下错误:
The listener for function 'MyFunction' was unable to start.
Microsoft.Azure.WebJobs.Host.Storage: Must replace singleton lease manager to
support multiple accounts.
我没有找到有关的信息Account
属性比 Singleton 类的元数据更多,也就是说Gets the name of the Azure Storage account that the blob lease should be created in
。我不知道该函数如何知道如何连接到存储以及在哪里配置连接。
我相信Account
的财产[Singleton]
属性是指应用程序设置的名称,而不是实际存储帐户的名称。如果未指定,则假定由指定的存储帐户AzureWebJobsStorage
应用程序设置。您在此处引用的应用程序设置需要包含完整的存储连接字符串。
请注意,如果您想要跨区域单例行为,应用程序的所有副本都需要使用相同的存储帐户(显然可以位于其他某个区域)。我预计会有一些与此相关的出口费用,但希望不足以产生太大影响。不过,需要注意一些事情。
UPDATE:
关于您遇到的错误消息,事实证明 Functions 2.0 中的此功能实际上存在问题。最近发布了一个新的 GitHub 问题来跟踪该问题:https://github.com/Azure/azure-webjobs-sdk/issues/2214 https://github.com/Azure/azure-webjobs-sdk/issues/2214。它还指出了一个临时解决方法,即您可以注册自己的IDistributedLockManager
实现,如测试代码所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)