Есть ли способ динамически определять количество и имена очередей, запускаемых в веб-задании Azure во время запуска? - PullRequest
0 голосов
/ 03 мая 2018

Я использую веб-задание Azure с функциями запуска по очереди для прослушивания нескольких очередей Azure. Метод обработки для каждой очереди идентичен (но очереди все еще должны быть отдельными). Мне было интересно, если есть способ сохранить список имен очередей в конфигурации и динамически создавать функции, которые запускаются в этих очередях во время запуска?

Я знаю, что это можно сделать для одной очереди , используя INameResolver , но я не смог найти решение для нескольких очередей.

1 Ответ

0 голосов
/ 03 мая 2018

На самом деле, вы можете написать методы обработки сервера в функции. Когда запущена веб-работа, она обходит все методы вашей функции.

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

В программе:

static void Main()
{
    var host = new JobHost(new JobHostConfiguration
    {
        NameResolver = new QueueNameResolver(),

    });
    host.RunAndBlock();
}

В функции:

public class Functions
{
    public static void ProcessQueueMessage([QueueTrigger("%queuename1%")] string message, TextWriter log)
    {
        log.WriteLine(message);
        Console.WriteLine("success");
    }
    public static void ProcessQueueMessage1([QueueTrigger("%queuename2%")] string message, TextWriter log)
    {
        log.WriteLine(message);
        Console.WriteLine("success2");
    }
}

В QueueNameResolver:

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

В App.config:

<appSettings>
    <add key="queuename1" value="queue"/>
    <add key="queuename2" value="myqueue"/>
</appSettings>

Независимо от того, добавляете ли вы сообщение в очередь или в очередь, оно всегда будет прослушивать их.

...