如何仅在一条触发消息上多次执行相同的 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);
}
}
如果要为每个租户并行处理,有多种技术。
- 对单个 Web 作业进行多线程处理。
类似于@viperguynaz 提供的代码,但只是将为每个租户处理的逻辑放入其自己的线程中。有很多不同的技术可以做到这一点。这样做的缺点是因为每个线程都将异步执行,您将失去 Web 作业仪表板的一些优点。
- 创建网络作业链
对于需要为每个租户执行一次的动词,您可以创建一个作业,其工作是获取单个队列项目并将其展开为每个租户的新队列项目。您将有一个 Web 作业负责在所有租户中展开操作,然后另一个 Web 作业处理每个租户的操作。这种方法的好处是它非常干净(您用于拆分租户操作的逻辑与正在执行的实际逻辑是分开的)并且可以同步执行处理,从而允许 Web 作业仪表板按预期工作。这种方法的一个缺点是在启动 'exploded' 任务时会有一点延迟,但这应该不会太重要吧?毕竟,它是一个后台进程,对吧? :)
默认情况下,Web 作业会从队列中拉出一批 16 个项目,以并行 运行 它们。您可以调整这些设置。这是一个 URL 以获取更多详细信息:
我有一个 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);
}
}
如果要为每个租户并行处理,有多种技术。
- 对单个 Web 作业进行多线程处理。
类似于@viperguynaz 提供的代码,但只是将为每个租户处理的逻辑放入其自己的线程中。有很多不同的技术可以做到这一点。这样做的缺点是因为每个线程都将异步执行,您将失去 Web 作业仪表板的一些优点。
- 创建网络作业链
对于需要为每个租户执行一次的动词,您可以创建一个作业,其工作是获取单个队列项目并将其展开为每个租户的新队列项目。您将有一个 Web 作业负责在所有租户中展开操作,然后另一个 Web 作业处理每个租户的操作。这种方法的好处是它非常干净(您用于拆分租户操作的逻辑与正在执行的实际逻辑是分开的)并且可以同步执行处理,从而允许 Web 作业仪表板按预期工作。这种方法的一个缺点是在启动 'exploded' 任务时会有一点延迟,但这应该不会太重要吧?毕竟,它是一个后台进程,对吧? :)
默认情况下,Web 作业会从队列中拉出一批 16 个项目,以并行 运行 它们。您可以调整这些设置。这是一个 URL 以获取更多详细信息: