首页 > 解决方案 > 有没有办法在启动期间动态确定 Azure webjob 中触发的队列的数量和名称?

问题描述

我正在使用带有队列触发功能的 Azure webjob 来侦听多个 Azure 队列。每个队列的处理方法是相同的(但队列仍然需要分开)。我想知道是否有一种方法可以将队列名称列表存储在配置中并动态创建在启动时在这些队列上触发的函数?

我知道可以使用 INameResolver对单个队列执行此操作,但我找不到多个队列的解决方案。

标签: c#azureazure-webjobsazure-queuesazure-storage-queues

解决方案


实际上,您可以在 Function 中编写服务器处理方法。当一个 webjob 运行时,它会遍历你函数中的所有方法。

您可以参考以下代码来动态触发多个队列。

在程序中:

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>

无论您将消息添加到队列还是 myqueue,它都会一直监听它们。


推荐阅读