我正在尝试扩展一个连续的网络作业。我的服务计划是按标准设置的,因此我可以扩展 10 个实例。问题是 webjob 没有横向扩展,并且在任何时候,只有一个在运行。
问问题
1292 次
2 回答
1
根据这篇文章,我们可以找到原因,请参考。
在幕后,TimerTrigger 使用 WebJobs SDK 的 Singleton 特性来确保在任何给定时间只运行触发函数的单个实例。当 JobHost 启动时,每个 TimerTrigger 函数都会使用一个 blob 租约(单例锁)。这种分布式锁确保在任何时候只有一个计划函数的实例在运行。
于 2018-06-11T06:00:09.653 回答
0
我会使用一个连续的 WebJob 而不是一个带有TimerTrigger
(TimerTrigger
表示该作业不是连续的)。您必须TimerTrigger
从代码中删除 。
默认情况下,Continuous WebJob 将在所有可用实例上执行。
在 WebJob 代码中,您必须注意消息是否正确锁定并完成以避免并发问题。
该Peek()
方法不太适合并行处理,因为消息没有锁定或完成,并且不关心其他锁。使用其中一个Receive()
或基于事件的RegisterMessageHandler()
模式。
以下是一些相关文档:
- https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.receivemode?view=azure-dotnet
- https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#settling-receive-operations
- https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues
于 2018-06-13T13:06:39.977 回答