Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一种方法可以动态确定Azure webjob在启动时触发的队列数量和名称?_C#_Azure_Azure Webjobs_Azure Queues_Azure Storage Queues - Fatal编程技术网

C# 是否有一种方法可以动态确定Azure webjob在启动时触发的队列数量和名称?

C# 是否有一种方法可以动态确定Azure webjob在启动时触发的队列数量和名称?,c#,azure,azure-webjobs,azure-queues,azure-storage-queues,C#,Azure,Azure Webjobs,Azure Queues,Azure Storage Queues,我正在使用带有队列触发函数的Azure webjob来侦听多个Azure队列。每个队列的处理方法是相同的(但队列仍然需要分开)。我想知道是否有一种方法可以在配置中存储队列名称列表,并在启动时动态创建在这些队列上触发的函数 我知道可以对单个队列执行此操作,但我找不到针对多个队列的解决方案。实际上,您可以在函数中编写服务器处理方法。当webjob运行时,它将遍历函数中的所有方法 您可以参考以下代码来动态触发多个队列 节目中: static void Main() { var host = n

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


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

实际上,您可以在函数中编写服务器处理方法。当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>


无论您向queue或myqueue添加消息,它都将始终侦听它们。

实际上,您可以在函数中编写服务器处理方法。当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>


无论您向queue或myqueue添加消息,它都将始终侦听它们。

谢谢,您认为有没有一种方法可以在函数代码不知道队列数量的情况下执行此操作?(这意味着,不必为添加的每个队列手动编写新的触发方法)您可以尝试在Azure Web作业中执行并行处理。运行webjob的多个实例。这允许Web作业实例的数量等于网站实例数量的五倍。你可以参考这篇文章了解更多细节。如果你担心繁重的工作负载,你可以向webjobs发送更多实例。如果没有,我建议您可以参考上面的代码。谢谢,您认为有没有一种方法可以在函数代码不知道队列数量的情况下实现这一点?(这意味着,不必为添加的每个队列手动编写新的触发方法)您可以尝试在Azure Web作业中执行并行处理。运行webjob的多个实例。这允许Web作业实例的数量等于网站实例数量的五倍。你可以参考这篇文章了解更多细节。如果你担心繁重的工作负载,你可以向webjobs发送更多实例。如果没有,我建议您参考上面的代码。简短的回答是否,您不能使用QueueTrigger动态创建处理器,但您可以根据您的要求编写代码来创建接收器。简短的回答是否,您不能使用QueueTrigger动态创建处理器,但可以根据您的需求编写代码来创建接收器