如何仅在一条触发消息上多次执行相同的 webjob 方法?

How do I execute same webjob method multiple time only on one trigger message?

我有一个 azure webjob MyTestWebJob

里面Function.cs

 public static void ProcessQueueMessage([QueueTrigger("Testqueue")] string message, TextWriter log)
        {
            log.WriteLine(message);
        }

我想多次执行 ProcessQueueMessage 因为我想让我的应用程序成为多租户所以对于每个 tenantId 它都会在 Testqueue 有消息时执行它。

basically how can I achieve multi tenancy using azure webjob?

任何人都可以给我提示或客户触发代码吗?

听起来更像是您想在每次排队消息时为每个租户执行 ProcessQueueMessage 中的代码:

public static void ProcessQueueMessage([QueueTrigger("Testqueue")] string message, TextWriter log)
{
    foreach (var id in tenantIds)
    {
        log.WriteLine(message);
    }
}

如果要为每个租户并行处理,有多种技术。

  1. 对单个 Web 作业进行多线程处理。

类似于@viperguynaz 提供的代码,但只是将为每个租户处理的逻辑放入其自己的线程中。有很多不同的技术可以做到这一点。这样做的缺点是因为每个线程都将异步执行,您将失去 Web 作业仪表板的一些优点。

  1. 创建网络作业链

对于需要为每个租户执行一次的动词,您可以创建一个作业,其工作是获取单个队列项目并将其展开为每个租户的新队列项目。您将有一个 Web 作业负责在所有租户中展开操作,然后另一个 Web 作业处理每个租户的操作。这种方法的好处是它非常干净(您用于拆分租户操作的逻辑与正在执行的实际逻辑是分开的)并且可以同步执行处理,从而允许 Web 作业仪表板按预期工作。这种方法的一个缺点是在启动 'exploded' 任务时会有一点延迟,但这应该不会太重要吧?毕竟,它是一个后台进程,对吧? :)

默认情况下,Web 作业会从队列中拉出一批 16 个项目,以并行 运行 它们。您可以调整这些设置。这是一个 URL 以获取更多详细信息:

https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config