NServiceBus一个分发者每消息类型最佳实践背后的原因是什么?

时间:2011-04-27 17:43:58

标签: deployment nservicebus topology nservicebus-distributor

我已经看过它多次提到作为最佳实践,每个消息类型应该配置一个分发器进程,但从来没有解释为什么会这样。由于增加分发服务器的数量会增加部署的复杂性,我想知道其背后的原因。我的猜测是,如果给定消息类型的所有可用订户都忙,那么分发者可能会等待一个人释放,而其他类型的可能有免费订阅者的消息则堆积在分发者的工作队列中。这准确吗?还有其他原因吗?

2 个答案:

答案 0 :(得分:4)

在工人完成之前,经销商确实不会分发更多工作。因此,如果工作人员与给定的消息类型绑定,其他人将坐在那里直到他们完成。 NSB没有优先级概念,所有消息都是相同的。工作人员不订阅特定的消息类型,他们只是从分销商那里获得了工作。

如果某些消息类型比其他消息类型具有“优先级”,那么它们应该拥有自己的分发服务器。如果“优先级”完全相同,那么添加更多工作人员会将性能提高到某一点。这取决于您正在操作的内容。如果它是数据库,则您的端点可能比cpu绑定的数据绑定更多。在这种情况下,添加更多工作人员将无济于事,因为他们在可能相同的资源上创建越来越多的争用。在这种情况下,您可能需要研究如何对资源进行分区。

答案 1 :(得分:1)

每种消息类型具有一个逻辑端点(逻辑端点等于分发器后面的端点或端点的许多副本),使您可以灵活地独立监视和扩展每个用例。

此外,它使您能够独立于所有其他消息类型对一种消息类型的端点进行版本化。

部署的复杂性更高,因为您安装了更多的流程,最终您必须在灵活性和复杂性之间取得平衡(一如既往),但请记住,许多这些部署难题都可以自动化。