0

我有一个从服务总线队列读取的 Azure 网络作业。我的目标是每个实例同步处理来自队列的 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)
{
...
}

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

4

1 回答 1

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 for the example。

于 2018-10-02T23:32:00.920 回答