Подтвердить что ты не робот

Как установить имя очереди Azure WebJob во время выполнения?

Я разрабатываю исполняемый файл Azure WebJobs, который я хотел бы использовать с несколькими веб-сайтами Azure. Каждому веб-сайту потребуется отдельная очередь Azure Storage. Проблема, которую я вижу, заключается в том, что "ProcessQueueMessage" требует, чтобы имя очереди определялось статически как атрибут первого параметра "inputText". Я предпочел бы, чтобы имя очереди являлось свойством конфигурации запущенного экземпляра веб-сайта Azure и выполняло исполняемый файл задания во время выполнения при запуске. Есть ли способ сделать это?

4b9b3361

Ответ 1

Теперь это можно сделать. Просто создайте INameResolver, чтобы разрешить любую строку, окруженную знаками% (percent). Например, если это ваша функция с указанным именем очереди:

public static void WriteLog([QueueTrigger("%logqueue%")] string logMessage)
{
    Console.WriteLine(logMessage);
}

Обратите внимание, что в строке logqueue есть% (процентов) знаков. Это означает, что система заданий попытается разрешить имя, используя INameResolver, который вы можете создать, а затем зарегистрируйтесь в своей работе.

Вот пример распознавателя, который просто возьмет строку, указанную в знаках процента, и просмотрит ее в AppSettings в файле конфигурации:

public class QueueNameResolver : INameResolver
{
    public string Resolve(string name)
    {
        return ConfigurationManager.AppSettings[name].ToString();
    }
}

И затем в вашем файле Program.cs вам просто нужно подключить это:

var host = new JobHost(new JobHostConfiguration
{
  NameResolver = new QueueNameResolver()
});
host.RunAndBlock();

Ответ 3

К сожалению, это невозможно. Вы можете использовать интерфейс IBinder для динамической привязки к очереди, но у вас не будет механизма запуска для него.

В основном, имя очереди ввода должно быть жестко запрограммировано, если вы хотите использовать триггеры. Для вывода вы можете использовать ранее упомянутый интерфейс.

Вот образец для IBinder. Образец связывает blob динамически, но вы можете сделать что-то очень похожее для очередей.