1

我有一个蔚蓝的webjob MyTestWebJob如何在一个触发消息上多次执行相同的webjob方法?

Function.cs

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

我想是因为我想让我的应用程序的多租户所以每tenantIdTestqueue有消息就西港岛线执行它来执行ProcessQueueMessage多个时间

基本上我怎么才能用azure webjob实现多租户?

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

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

回答

2

如果要并行每个租户的处理也有一些技巧:

4

像你想在每ProcessQueueMessage消息排队的时间来执行代码为每个租户听起来比较。

  1. 多线程单个webjob。

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

  • 创建webjob链
  • 对于需要你可以创建一个作业,其任务是采取单一队列项和爆炸的每个租户被执行一次动词它作为每个租户的新队列项目。您需要负责一个Web工作,负责在所有租户之间爆发该操作,然后负责处理每个租户的操作的另一个Web工作。这种方法的好处在于,它的超级清理(您的分离租户操作的逻辑与正在执行的实际逻辑是分开的)并且可以同步执行处理,从而允许Web作业仪表板按预期工作。这种方法的不足之处在于,你将在启动'爆炸'任务时得到一点延迟,但这不应该太重要吗?毕竟,它的背景过程呢? :)

    默认情况下,Web作业从队列中拉出一批16个项目并行运行它们。你可以调整这些设置。这里是一个URL的更多细节:

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

    相关问题