我已经看到它多次提到作为一种最佳实践,应该为每种消息类型配置一个分发器进程,但从未解释过为什么会这样。由于增加分销商的数量会增加部署的复杂性,我想知道其背后的原因。我的猜测是,如果给定消息类型的所有可用订阅者都忙,分发者可能会等待一个释放,而可能有空闲订阅者的其他类型的消息堆积在分发者的工作队列中。这是准确的吗?还有其他原因吗?
问问题
1299 次
2 回答
4
确实,在工人完成之前,分销商不会分配更多的工作。因此,如果工人与给定的消息类型捆绑在一起,其他人将坐在那里直到他们完成。NSB 没有优先级的概念,所有消息都是平等的。工人不订阅特定的消息类型,他们只是从分发者那里获得工作。
如果某些消息类型比其他消息类型具有“优先级”,那么它们应该有自己的 Distributor。如果“优先级”都相同,那么增加更多的工人将提高性能到某个点。这将取决于您正在操作的资源。如果它是一个数据库,那么您的端点可能会比 cpu 绑定更多的数据。在这种情况下,添加更多的工人将无济于事,因为它们会在可能的相同资源上产生越来越多的争用。在这种情况下,您可能需要研究如何对资源进行分区。
于 2011-04-27T19:09:08.693 回答
1
每种消息类型都有一个逻辑端点(逻辑端点等于分发器后面的一个端点或多个端点副本)使您可以灵活地独立监视和扩展每个用例。
此外,它使您能够独立于所有其他消息类型对端点进行版本控制。
部署的复杂性更高,因为您安装了更多的流程,最终您必须(一如既往)在灵活性和复杂性之间取得平衡,但请记住,许多这些部署难题都可以自动化解决。
于 2011-04-27T18:27:54.340 回答