Я разрабатываю исполняемый файл Azure WebJobs, который я хотел бы использовать с несколькими веб-сайтами Azure. Каждому веб-сайту потребуется отдельная очередь Azure Storage. Проблема, которую я вижу, заключается в том, что "ProcessQueueMessage" требует, чтобы имя очереди определялось статически как атрибут первого параметра "inputText". Я предпочел бы, чтобы имя очереди являлось свойством конфигурации запущенного экземпляра веб-сайта Azure и выполняло исполняемый файл задания во время выполнения при запуске. Есть ли способ сделать это?
Как установить имя очереди Azure WebJob во время выполнения?
Ответ 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();
Ответ 2
Это, вероятно, старый вопрос, но в случае, если кто-то еще наткнется на этот пост. Это теперь поддерживается передачей объекта JobHostConfiguration
в конструктор JobHost.
Ответ 3
К сожалению, это невозможно. Вы можете использовать интерфейс IBinder
для динамической привязки к очереди, но у вас не будет механизма запуска для него.
В основном, имя очереди ввода должно быть жестко запрограммировано, если вы хотите использовать триггеры. Для вывода вы можете использовать ранее упомянутый интерфейс.
Вот образец для IBinder
. Образец связывает blob динамически, но вы можете сделать что-то очень похожее для очередей.