4

使用 QueueClient 消息泵扩展正在处理许多长时间运行的 Azure 服务总线消息的辅助角色的最佳方法是什么。

如果使用 QueueClient.OnMessageOptions.MaxConcurrentCalls = 6 和 QueueClient.OnMessage 是否意味着我一次最多只能处理 6 条消息?

在 OnMessage 回调中长时间运行处理以生成一个新任务来完成它的处理是不是很糟糕?

我应该改用 QueueClient.OnMessageAsync 吗?

谢谢你的帮助。

4

1 回答 1

3

“长时间运行”是指受 IO 限制还是受 CPU 限制?

假设 IO 绑定,那么我不会在 OnMessage 回调中生成新任务。这会产生线程管理开销,从而降低大规模处理速度。

如果您正在使用 IO 绑定操作,请考虑使用OnMessageAsync,并确保等待任何这些操作的异步实现。这可以更有效地使用您现有的线程。

如果您的操作受 CPU 限制,那么创建任务可能会为您做更多的事情。Stephen Cleary 在一系列优秀文章中讨论了这一机制:

http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html

MaxConcurrentCalls属性控制对服务总线的并发请求数。如果您受 IO 限制并受到可用带宽的限制,则增加此数字的影响有限。我建议使用 Azure 客户端性能计数器进行一些性能测试,以获得适合您环境的最佳值。

于 2015-01-21T15:42:57.293 回答