使用 ServiceBusTrigger 时的 Azure WebJob 并发
Azure WebJob concurrency when using ServiceBusTrigger
我一直在使用 Azure 存储队列来提供 WebJob,使用 QueueTrigger
属性。我将我的 QueueTrigger
配置为使多个项目出列以进行并发处理,如下所示:
public static void Main()
{
JobHostConfiguration config = new JobHostConfiguration();
config.NameResolver = new QueueNameResolver();
config.Queues.NewBatchThreshold = 10;
JobHost host = new JobHost(config);
host.RunAndBlock();
}
public static void ExecuteStorageQueueItem([QueueTrigger("%AzureQueueName%")] CloudQueueMessage message, TextWriter logger)
{
ProcessRequest(message.AsString, logger);
}
我更愿意使用服务总线。 ServiceBusConfiguration
上的 MaxConcurrentCalls
参数是否允许相同的自动并行执行?例如:
public static void Main()
{
JobHostConfiguration config = new JobHostConfiguration();
config.NameResolver = new QueueNameResolver();
ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 10;
config.UseServiceBus(serviceBusConfig);
JobHost host = new JobHost(config);
host.RunAndBlock();
}
public static void ExecuteServiceBusItem([ServiceBusTrigger("%ServiceBusQueueName%")] BrokeredMessage message, TextWriter logger)
{
ProcessRequest(message.GetBody<string>(), logger);
}
我不确定 MaxConcurrentCalls
是否如我所想!
本质上是的,MaxConcurrentCalls
定义了客户端处理队列所使用的线程数量。
当调用QueueClient.OnMessage
方法时it starts a message pump on an infinte loop that is constantly polling. The OnMessageOptions.MaxConcurrentCall
sets the number of concurrent calls to the callback the message pump should initiate.
更多背景故事:Introducing the Event-Driven Message Programming Model for the Windows Azure Service Bus
我一直在使用 Azure 存储队列来提供 WebJob,使用 QueueTrigger
属性。我将我的 QueueTrigger
配置为使多个项目出列以进行并发处理,如下所示:
public static void Main()
{
JobHostConfiguration config = new JobHostConfiguration();
config.NameResolver = new QueueNameResolver();
config.Queues.NewBatchThreshold = 10;
JobHost host = new JobHost(config);
host.RunAndBlock();
}
public static void ExecuteStorageQueueItem([QueueTrigger("%AzureQueueName%")] CloudQueueMessage message, TextWriter logger)
{
ProcessRequest(message.AsString, logger);
}
我更愿意使用服务总线。 ServiceBusConfiguration
上的 MaxConcurrentCalls
参数是否允许相同的自动并行执行?例如:
public static void Main()
{
JobHostConfiguration config = new JobHostConfiguration();
config.NameResolver = new QueueNameResolver();
ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 10;
config.UseServiceBus(serviceBusConfig);
JobHost host = new JobHost(config);
host.RunAndBlock();
}
public static void ExecuteServiceBusItem([ServiceBusTrigger("%ServiceBusQueueName%")] BrokeredMessage message, TextWriter logger)
{
ProcessRequest(message.GetBody<string>(), logger);
}
我不确定 MaxConcurrentCalls
是否如我所想!
本质上是的,MaxConcurrentCalls
定义了客户端处理队列所使用的线程数量。
当调用QueueClient.OnMessage
方法时it starts a message pump on an infinte loop that is constantly polling. The OnMessageOptions.MaxConcurrentCall
sets the number of concurrent calls to the callback the message pump should initiate.
更多背景故事:Introducing the Event-Driven Message Programming Model for the Windows Azure Service Bus