我的 Azure 网站上有一个持续运行的 Webjob。它负责从 QueueTrigger 检索项目后执行一些工作。我正在尝试提高从队列中处理项目的速率。当我扩展我的应用服务计划时,处理速率按预期增加。
我担心的是,仅仅为了运行我的 Webjob 的额外实例而支付额外的虚拟机费用似乎很浪费。我正在寻找在单个服务器上运行同一 Webjob 的多个实例的选项/最佳实践。
我尝试在 Main() 内的各个线程中启动多个 JobHost,但要么不起作用,要么我做错了什么...Webjob 将无法运行,因为每个线程都试图访问'WebJobSdk.marker'。我当前的解决方案是多次发布我的 Webjob,每次稍微修改“webjob-publish-settings.json”中的“webJobName”,以便同一项目在发布时被视为不同的 Webjob。到目前为止,这效果很好,预计每次我需要进行任何更新时都会产生大量额外的工作。
最终,我正在寻找一些关于实现这一目标的推荐方法的建议。理想情况下,我希望通过代码运行多个实例,并且只需在需要更新代码时发布一次。
有什么想法吗?
最佳答案
您可以使用 JobHostConfiguration.QueuesConfiguration.BatchSize 和 NewBatchThreshold 设置来控制队列处理的并发级别。后一个 NewBatchThreshold 设置是当前正在进行的 beta1 版本中的新设置。但是,通过在 Nuget 包管理器中启用“预发布”包,如果您想尝试的话,您将看到新版本。提高 NewBatchThreshold 设置会增加并发级别 - 例如设置为100意味着一旦当前运行的队列函数数量低于100,就会获取一批新的消息进行并发处理。
标记文件错误已在 this commit 中修复不久前,这又是当前正在进行的 v1.1.0 版本的一部分。
关于azure - Azure 中单个 VM 上连续 Webjob 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706675/