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

时间:2015-10-20 16:14:25

标签: azure azure-webjobs azure-servicebus-queues azure-webjobssdk

我有一个azure webjob MyTestWebJob

Function.cs

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

我想多次执行ProcessQueueMessage,因为我想让我的应用程序成为多租户,所以当tenantId有消息时,它会执行它{/ 1}。

  

基本上我如何使用azure webjob实现多租户?

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

2 个答案:

答案 0 :(得分:4)

在每次邮件排队时,您更希望为每个租户执行ProcessQueueMessage中的代码:

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

答案 1 :(得分:2)

如果要并行化每个租户的处理,有许多技术。

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

    1. 创建一个webjob链
    2. 对于需要为每个租户执行一次的动词,您可以创建一个作业,其作业是获取单个队列项并将其作为每个租户的新队列项进行爆炸。您将有一个Web作业负责在所有租户中展开操作,然后是另一个处理每个租户的操作的Web作业。这种方法的好处在于它的超级清洁(用于拆分租户操作的逻辑与正在执行的实际逻辑是分开的),并且可以同步执行处理,从而允许Web作业仪表板按预期工作。这种方法的一个缺点是你会在开始爆炸的过程中获得一点延迟。任务,但这不是太重要了吗?毕竟,它的背景过程反正对吗? :)

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

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