我有一个从服务总线队列读取的 Azure Web 作业。我的目标是每个实例同步处理来自队列的 1 条消息。这可能吗?
我观察到的是,如果队列中有 100 条消息,我会看到 10~20 个 Web 作业实例同时运行,每个实例处理队列中的不同消息。我想将其限制为 1 条消息。到目前为止,我已经尝试了以下方法:
- 我创建了一个带有 {"is_singleton":true} 属性的 settings.job 文件。
- 我还尝试在函数签名之上使用 [Singleton] 属性。
- 我尝试设置属性配置。队列.批处理大小 = 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 时的并发性。