如何扩展Azure Webjobs

问题描述:

我知道webjob可以与webapp进行扩展,即如果我的webapp在5个实例上运行,那么webjobs也会在5个实例上运行。 我只想知道在网站的每个实例中是否有多个webjob实例。如何扩展Azure Webjobs

注意:我最大的值为JobHostConfiguration.QueuesConfiguration.BatchSize = 32已经。

现在,我的webapp运行在1个实例上。 Webjobs正在同时处理32个。 我的目标是同时处理3 * 32 = 96。

实现此目标的一种可能方式是可以部署相同的webjobs 3次(为webJobName属性设置不同的名称),但我不确定这是否是一种好的做法。请给我指出适当的文件。

  1. 什么config.Queues.NewBatchThreshold表示?

  2. config.Queues.NewBatchThreshold的默认值是多少?

  3. 对于队列处理应该推荐什么值config.Queues.NewBatchThreshold

https://github.com/Azure/azure-webjobs-sdk/issues/628复制乔恩的回答是:

的NewBatchThreshold是已经离开的消息的数量在批量处理SDK刷新批次之前。

例如,如果批量大小为20,NewBatchThreshold为5,则SDK将每次从队列中抓取20条消息,将它们传递给您的代码以供您逐一处理它们,然后当它到达过去5个未处理的邮件(这样你就已经处理15)会抢在“并行执行”

默认情况下,NewBatchThreshold是BATCHSIZE(see source code)的一半这就是为什么你看到的价值在未来20 See here 0表示批量大小为1.

请注意,我们希望使这一点不那么令人困惑,根据this issue我只是打开。

+1

第一个问题呢?如果我的业务需要处理超过32个,是否有任何方法可以在单个实例中处理更多?如何同时运行96或更多。寻找描述缩放最佳实践的一些很好的文档 –

+0

并行运行的作业的最大数目最终为'NewBatchThreshold + BatchSize'。所以通过将'NewBatchThreshold'设置为更高的数字,就可以实现这一点。 –

+0

@ArifulHaque我认为缩放的最佳实践是拥有超过1个webjob(网站)实例......强制实施单个实例的约束可能违反了最佳实践。在任何情况下,如果您实现了多个执行相同操作的队列触发函数,则可能可以实现BatchSize> 32。 – Matt