如何控制Azure Service Bus队列消息并发接收数?内置支持还是需自定义逻辑?
Azure Service Bus队列并发处理控制:内置选项即可满足需求
你完全不需要自定义复杂逻辑!Azure Service Bus的消息处理器内置了并发控制的选项,就是你代码里已经用到的MaxConcurrentCalls参数,刚好能解决你的问题。
核心说明
MessageHandlerOptions里的MaxConcurrentCalls属性就是专门用来控制同时处理的消息数量的:
- 它的默认值是
1,所以你当前的代码是每次只处理1条消息 - 如果你想每次处理2个请求,只需要把这个值改成
2就能实现你的需求
修改后的代码示例
var options = new MessageHandlerOptions() { MaxConcurrentCalls = 2, // 调整为2,控制并发处理的消息数 AutoComplete = false }; client.RegisterMessageHandler( async (message, cancellationToken) => { try { // 这里编写调用原生系统的处理逻辑 await client.CompleteAsync(message.SystemProperties.LockToken); } catch { await client.AbandonAsync(message.SystemProperties.LockToken); } }, options);
额外注意事项
- 因为你设置了
AutoComplete = false,一定要确保处理成功后调用CompleteAsync,失败时调用AbandonAsync(你的代码已经做了这一点,很规范) - 这个参数控制的是单个消息处理器实例的并发数,如果你的应用部署了多个实例,总并发数会是
实例数 × MaxConcurrentCalls,如果原生系统承受不了总并发,要注意控制实例数量 - 如果未来需要更复杂的批量处理(比如攒够固定数量的消息再统一处理),可能需要用到Service Bus的批量接收API,但就你当前“每次仅处理2个请求,完成后再处理下一批”的需求来说,
MaxConcurrentCalls完全够用
内容的提问来源于stack exchange,提问作者Darey
相关产品推荐
相关产品推荐

