Azure Service Bus Queue并行异步处理消息

时间:2015-09-25 20:32:58

标签: c# multithreading azure message-queue azure-servicebus-queues

我创建一个监听Azure Service Bus队列的Windows窗体程序,它为每个收到的brokeredMessage执行一个很长的过程:

QueueClient Client = QueueClient.CreateFromConnectionString(ConfigurationWrapper.QueueConnectionString, ConfigurationWrapper.QueueName);

            // Configure the callback options
            OnMessageOptions options = new OnMessageOptions();
            options.AutoComplete = false;
            options.AutoRenewTimeout = TimeSpan.FromMinutes(1);


            // Callback to handle received messages
            Client.OnMessageAsync((message) =>
            {
                  message.Complete();
                //big jobs put 10 minutes
               Task t = Task.Factory.StartNew(() => DoAVeryLongJob(message));

               return t;
            }, options);

如果我在此队列中以2秒的间隔发送2条消息,程序将处理第一条消息(调用DoAVeryLongJob需要10分钟),第二条消息将在第一条呼叫结束时处理(10分钟后) )。我想要的是并行处理这些消息。

是否可以并行处理队列消息?

1 个答案:

答案 0 :(得分:2)

OnMessageOptions 实例中,您需要增加 MaxConcurrentCalls 。以下代码将并行处理来自队列的5条消息。

// Configure the callback options
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.MaxConcurrentCalls = 5;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);