Функция Azure, запускаемая по времени синглтона в нескольких регионах - PullRequest
1 голос
/ 30 мая 2019

У меня есть функция Azure, запускаемая по времени, развернутая в нескольких регионах, и я хочу, чтобы в них было одноэтапное поведение. Например, если регионы находятся на западе США и в центральной Европе, я хочу, чтобы каждый раз запускался только один из них. Можно ли этого достичь?

Как сказано в документации , 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. Я не знаю, как функция знает, как подключиться к хранилищу и где настроить соединение.

1 Ответ

1 голос
/ 31 мая 2019

Я считаю, что свойство Account атрибута [Singleton] относится к имени параметра приложения, а не к имени вашей учетной записи хранения. Если не указан, предполагается, что учетная запись хранения указана в параметре приложения AzureWebJobsStorage. В настройках приложения, на которые вы ссылаетесь, должна быть указана полная строка подключения к хранилищу.

Обратите внимание, что если вы хотите кросс-регион одноэтапное поведение, все копии вашего приложения должны будут использовать одну и ту же учетную запись хранения (которая, очевидно, может находиться в каком-либо другом регионе). Я ожидаю, что будет несколько выходных сборов, связанных с этим, но, надеюсь, недостаточно, чтобы оказать большое влияние. Что-то, о чем нужно знать, однако.

UPDATE:

Что касается сообщения об ошибке, с которым вы столкнулись, оказалось, что на самом деле проблема с этой функцией в функциях 2.0. Недавно была открыта новая проблема GitHub, которая отслеживает проблему: https://github.com/Azure/azure-webjobs-sdk/issues/2214. Он также указывает на временный обходной путь, который заключается в том, что вы можете зарегистрировать собственную реализацию IDistributedLockManager, как показано в тестовом коде.

...