使用 Azure 队列存储为每个队列配置 QueueTrigger

Configure QueueTrigger per queue using Azure queue storage

我有两种不同的场景来使用 Azure 队列存储处理 2 种不同类型的队列。

我想设置一个队列一个接一个运行,另一个队列同时运行。

我一直在查看文档,我可以将配置应用于影响整个队列范围的主机。

static void Main(string[] args)
    {
        JobHostConfiguration config = new JobHostConfiguration();
        config.Queues.BatchSize = 8;
        config.Queues.MaxDequeueCount = 4;
        config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);
        JobHost host = new JobHost(config);
        host.RunAndBlock();
    }

我可以使用单个 Azure 存储帐户配置这些方案吗?

根据你的问题,我了解到你有 2 个队列,每个队列需要用于处理不同的 tasks/jobs。

您可以遵循这些方法

1) 部署 2 个 Web 作业,每个作业在不同的队列上等待,并在消息出现在各自的队列上时触发相应的作业。您上面提到的配置代码为一项工作奠定了基础。 AFAIK,一项工作可以在一个队列中等待。您可以在 Main() 方法

旁边使用这样的方法
public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage)
{
    //do something
}

2) 如果你想根据来自一个队列的消息触发多个场景,你可以在 ProcessQueueMessage 方法上有一个 if else 块,或者如果你想让它更易于管理,使用策略模式来从 ProcessQueueMessage

执行正确的方法

如果您遵循上面的 #1,您将为每个 task/job/scenario 部署不同的 Web 作业。如果您遵循上面的 #2,您将部署一个 Web 作业,每条消息的作用在处理消息时决定。

与等待队列相关的文档here

[更新]

正如我们所知,一个 Web 作业只能在一个队列上等待,在这种情况下,在队列上等待不是正确的方法。最好定期触发网络作业(比如每 5 分钟一次)。从多个队列中取出消息并处理它们的逻辑将成为一个 Web 作业的一部分。处理每个队列可以是一种方法,该方法被 Web 相同的作业调用(一个接一个或同时使用 Task)。您可以在 CloudQueue.GetMessages 上为每个队列传递消息计数。它与 windows 服务的作用非常相似。只是触发部分由 Web 作业负责,它作为 Web 作业而不是 windows 服务运行。这是一个粗略的伪代码:

main()
{
  // initialize webjob
}
public static MyWebJobMethod(...)
{
    Task a = () => {//process queue 1};
    Task b = () => {//process queue 2}
    Task.WaitAll(a,b);
}