无法使Continuous Azure Webjob单例

时间:2018-10-02 23:07:27

标签: azure-webjobs azure-webjobssdk azure-webjobs-continuous

我有一个从Service Bus队列读取的Azure webjob。我的目标是针对每个实例同步处理来自队列的1条消息。有可能吗?

我观察到的是,如果队列中有100条消息,我会看到10到20个Webjob实例同时运行,每个实例都处理来自队列的不同消息。我想将此限制为1条消息。到目前为止,我已经尝试了以下方法:

  1. 我创建了一个具有{“ is_singleton”:true}属性的settings.job文件。
  2. 我还尝试过在函数签名的顶部使用[Singleton]属性。
  3. 我尝试设置属性config.Queues.BatchSize = 1和config.Queues.NewBatchThreshold = 1。

这是我的webjob函数的签名:

[ServiceBusAccount("servicebusconnstr")]
public static void MigrateDoc([ServiceBusTrigger("myqueue")] string queueItem, TextWriter log)
{
...
}

这些方法似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

弄清楚了。我需要的设置是ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls =1。可以这样做:

var config = new JobHostConfiguration();
var serviceBusConfig = new ServiceBusConfiguration();
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1;

if (config.IsDevelopment)
{
     config.UseDevelopmentSettings();
}

config.UseServiceBus(serviceBusConfig);

var host = new JobHost(config);
host.RunAndBlock();

感谢本文:Azure WebJob concurrency when using ServiceBusTrigger