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 的回答标记为最有帮助。
我有一个由队列触发的 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 的回答标记为最有帮助。