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

时间:2017-12-30 17:37:11

标签: azure triggers azure-webjobs

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

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

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

虽然我可以重构代码来实现这一点,但我真的没有时间,而且回报很小。我只想让它一次处理一个项目,但我找不到任何可能导致这种情况发生变化的事情。 在我应该注意的天蓝色门户网站中是否有任何设置?我不相信任何与触发器本身相关的代码都已发生变化。

提前谢谢

2 个答案:

答案 0 :(得分:0)

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

对于Azure存储队列

默认情况下,QueueTrigger一次会抓取16条消息并并行处理它们。如果您不想这样做,则需要在WebJob的静态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();
}

答案 1 :(得分:0)

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