我有一个由队列触发的Azure webjob(继承,最初不是由我编写的)。队列通常一次只放置一个项目,但每个月的第一个项目有很多项目。
在这些情况下,它总是一次处理一个队列项目,在完成下一个队列项目之前完成处理。
然而,我注意到,几个月前它开始处理两个文件,这导致了问题。虽然我可以重构代码来实现这一点,但我真的没有时间,而且回报很小。我只想让它一次处理一个项目,但我找不到任何可能导致这种情况发生变化的事情。 在我应该注意的天蓝色门户网站中是否有任何设置?我不相信任何与触发器本身相关的代码都已发生变化。
提前谢谢
答案 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的答案是最有帮助的。