0

我有一个使用 AzureMessageQueue 作为传输的 Azure 辅助角色托管的 NServiceBus 端点。我很确定我将在 azure 中配置多个实例来运行辅助角色。我也有一些订单很重要的消息。

这是我的问题。有没有办法通过这种类型的设置来控制顺序(azure worker 角色向外扩展)?

我应该看传奇吗?像下面描述的技术(使用 bus.send(object[] messages) 重载)将在这个模型中工作,我猜,但这只有在由于天蓝色队列的大小限制而有一些消息时才是理想的.

http://mikaelkoskinen.net/post/NServiceBus-In-order-message-processing.aspx

4

1 回答 1

0

Bus.Send in batch 会有所帮助,如果消息足够小,从消息队列配置读取批量大小也会有所帮助,您可以通过这种方式明确控制消息的顺序。批量发送将多个消息实例放在同一个物理队列消息中,而批量读取将一次性从队列中拉出多条物理消息并在节点上按顺序处理它们。

另一种选择是同步消息处理程序中的读取,使用 blob 上的租约。请参阅 nsb timeoutmanager 的代码,了解如何使用它们进行同步,或查看 steve marx 的有关该主题的博客文章。http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases

但请注意,azure 消息队列本身不保证订单,这是尽最大努力。如果要保证传输级别的顺序,则需要使用启用了消息排序的 Azure 服务总线队列。

亲切的问候,伊夫

于 2012-11-18T13:27:36.337 回答