无法使连续 Azure Web 作业成为单一实例



我有一个从服务总线队列读取的 Azure Web 作业。我的目标是每个实例同步处理来自队列的 1 条消息。这可能吗?

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

  1. 我创建了一个带有 {"is_singleton":true} 属性的 settings.job 文件。
  2. 我还尝试在函数签名之上使用 [Singleton] 属性。
  3. 我尝试设置属性配置。队列.批处理大小 = 1 和配置。队列。新批处理阈值 = 1。

这是我的网络作业功能的签名:

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

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

想通了。我需要的设置是 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 在示例中使用 ServiceBusTrigger 时的并发性。

最新更新