Azure 触发的 webjob 开始一次处理 2 条消息

Azure triggered webjob started processing 2 messages at a time

我有一个由队列触发的 Azure webjob(继承的,不是我最初编写的)。队列通常一次只能放置一个项目,但在每个月的第一天会有很多项目。

在这些情况下,它总是一次处理一个队列项目,在拾取下一个之前完成处理。

然而,我注意到,从几个月前开始,它开始同时处理两个文件,这导致了问题。

虽然我可以重构代码以允许这样做,但我真的没有时间,而且 return 将是最小的。我只是想让它一次处理一个项目,但我找不到任何可能导致这种变化的东西。 我应该注意 azure 门户中的任何设置吗?我认为与触发器本身相关的任何代码都没有更改。

提前致谢

当然可以,这可以做到。请注意,WebJob 可以由服务总线队列或 Azure 存储队列触发。这是两者的信息。

对于 Azure 存储队列

默认情况下,QueueTrigger 将一次抓取 16 条消息并并行处理它们。如果您不想这样做,则需要在 WebJob 的 static void Main 方法中将 JobHostConfiguration 实例的 BatchSize 属性 设置为 1。示例:

 static void Main(string[] args)
 {
     JobHostConfiguration config = new JobHostConfiguration();
     config.Queues.BatchSize = 8;
     JobHost host = new JobHost(config);
     host.RunAndBlock();
 }

对于服务总线队列

同样,您将在 JobHostConfiguration 中设置属性。如果您使用的是服务总线,则需要进行更多设置。示例:

static void Main(string[] args)
{    
    JobHostConfiguration config = new JobHostConfiguration();
    ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
    serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1;
    config.UseServiceBus(serviceBusConfig);

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

就我而言,问题是有人将 Azure 应用服务扩展到 2 个实例。但是,我将 Rob 的回答标记为最有帮助。