WebJob QueueTrigger - 每个函数的限制
WebJob QueueTrigger - limit per function
我已经准备好一些 Webjobs,每个 Webjobs 都会响应一些 QueueTrigger
,例如
public static void ProcessMessage([QueueTrigger("XXXXXXX")] string message, TextWriter log)
{
//processing message
}
public static void ProcessMessage([QueueTrigger("YYYYYY")] string message, TextWriter log)
{
//processing message
}
我应该将每个触发器分离到一个单独的作业中吗?有什么理由可以说明继续这条路是个坏主意,即它可以触发的队列越多,由于线程限制而执行的函数越少?
您正在做的是通用方法 - WebJobs SDK JobHost 旨在处理同一应用程序中的许多不同工作功能。确实,单个主机中的所有工作职能将共享相同的 process/memory space 和限制,但对于大多数情况,这不是问题,并且是推荐的方法。
具体对于 QueueTrigger,您的每个函数都将有效地轮询新工作,并且当工作可用时,每个函数将以 16 条为一组提取消息(可通过 JobHostConfiguration.Queues
配置)并并行处理它们。
如果需要,您还可以通过增加运行 WebJob 的实例数来进行横向扩展。然后每个实例将与其他实例协同工作以处理更多负载。
我已经准备好一些 Webjobs,每个 Webjobs 都会响应一些 QueueTrigger
,例如
public static void ProcessMessage([QueueTrigger("XXXXXXX")] string message, TextWriter log)
{
//processing message
}
public static void ProcessMessage([QueueTrigger("YYYYYY")] string message, TextWriter log)
{
//processing message
}
我应该将每个触发器分离到一个单独的作业中吗?有什么理由可以说明继续这条路是个坏主意,即它可以触发的队列越多,由于线程限制而执行的函数越少?
您正在做的是通用方法 - WebJobs SDK JobHost 旨在处理同一应用程序中的许多不同工作功能。确实,单个主机中的所有工作职能将共享相同的 process/memory space 和限制,但对于大多数情况,这不是问题,并且是推荐的方法。
具体对于 QueueTrigger,您的每个函数都将有效地轮询新工作,并且当工作可用时,每个函数将以 16 条为一组提取消息(可通过 JobHostConfiguration.Queues
配置)并并行处理它们。
如果需要,您还可以通过增加运行 WebJob 的实例数来进行横向扩展。然后每个实例将与其他实例协同工作以处理更多负载。