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

Deployment NServiceBus每个消息类型一个分发服务器最佳实践背后的原因是什么?,deployment,nservicebus,topology,nservicebus-distributor,Deployment,Nservicebus,Topology,Nservicebus Distributor,我曾多次提到,作为一种最佳实践,每个消息类型应该配置一个分发进程,但从未解释过为什么会这样。由于分发服务器的数量增加了部署的复杂性,我想知道其背后的原因。我的猜测是,如果给定消息类型的所有可用订阅者都很忙,分发服务器可能会在等待一个消息释放时卡住,而其他类型的消息(可能有空闲的子订阅者)则会堆积在分发服务器的工作队列中。这准确吗?还有其他原因吗?每种消息类型有一个逻辑端点(逻辑端点等于分发服务器后面的一个端点或端点的多个副本),这使您能够灵活地独立监视和扩展每个用例 此外,它使您能够独立于所有其

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

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

此外,它使您能够独立于所有其他消息类型为一种消息类型设置端点的版本


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

在工作人员完成之前,分发服务器不会分发更多的工作。因此,如果工作人员与给定的消息类型捆绑在一起,其他人将坐在那里,直到完成为止。NSB没有优先级的概念,所有消息都是平等创建的。工作人员不订阅特定的消息类型,他们只是从分发服务器获得工作


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

谢谢。那么,我关于单个分销商的性能影响的猜测正确吗?啊哈,谢谢!。我没有意识到分发服务器无法区分不同消息类型的订阅者。那么,您的意思是订户必须能够处理流入其分发服务器的所有消息类型?如果给定订阅者没有特定消息类型的处理程序,会发生什么情况?如果工作进程没有消息类型的处理程序,它将被忽略。在这种情况下,为什么不可能通过添加更多专门用于“优先级”消息的工作进程(没有其他类型的处理程序)来扩展我最初的假设是,如果消息类型A的所有处理程序都被占用,那么消息类型B的处理将被阻止,但在一个分发服务器和许多工作人员只处理特定消息类型的情况下,情况似乎并非如此。这样做会否定负载平衡,对于每种类型,您只需要创建一个节点,并有效地创建了两个单端点,而不是负载平衡对。我还确认,邮件会被删除,这是不好的。这还需要部署2个不同的端点,而不是统一部署相同的位。