NServiceBus经销商类似行为的标准负载平衡器。它是透明的扩展的关键消息处理在许多机器。
作为标准NServiceBus过程中,经销商维护所有NServiceBus的容错和性能特征,但设计不压倒任何职工的节点配置来接收工作。
什么时候使用它呢?
扩展(有或没有一个分销商)对所做的工作仅仅是有用的一台机器需要时间,因此帮助更多的计算资源。帮助,监控CriticalTime性能计数器端点和当你有需要添加的分销商。使用经销商在需要的时候扩展是由不容易改变代码,刚刚开始相同的端点在经销商和职工档案,本文解释了。
分销商是否适用只有当使用MSMQ传输交换消息。NServiceBus使用MSMQ作为默认的运输。经销商不需要使用等代理传输和RabbitMQ状态"置疑"时,因为它们共享相同的队列,即使有多个端点的实例运行。NServiceBus将确保只有其中一个的实例,在这种情况下,端点将处理信息。
为什么要使用它呢?
当开始使用NServiceBus时,您将看到,您可以很容易地运行多个实例相同的过程相同的输入队列。这可能看起来像外扩,但真的是没有运行多个不同的线程在相同的过程。你会发现你不能在多台计算机共享一个输入队列。
经销商在这个限制。
MSMQ V4呢?
MSMQ的版本4,2008年与Vista和服务器可用,可以执行远程事务接收。这意味着过程在其他机器上可以以事务的方式把工作从一个队列在不同的机器上。如果处理消息的机器崩溃,消息回滚到队列和其他机器可以处理它。
尽管分销商提供类似的功能甚至在Vista发布之前,还有其他原因使用它甚至在新的操作系统。“远程事务接收”的问题是,当多个工作节点时,它会随之变慢。这是由于管理的开销更多的事务,以及长时间,这些交易是开放的。
简而言之,扩展MSMQ V4的好处本身是相当有限的。
性能?
经销商做多个操作对于每个消息,它是处理(接收一个现成的消息形成一个工人,发送消息��工人工作,接收一个现成的消息后加工),其性能是有限的虽然做很少的工作,因此使用一个经销商的好处是更适合较长时间运行的工作单元(高I / O和http调用一样,写入磁盘)而不是非常短暂的工作单元(快速从数据库读取和分派消息使用 Bus.Send
或 Bus.Publish
)
为了了解你预期的性能可分为常规端点性能和除以4。
如果您需要规模小的工作单元你可能想考虑较小的垂直部分切片处理程序的功能和部署他们自己的终点。
它是如何工作的?
工作者节点将消息发送到经销商,告诉它当他们准备工作。这些消息到达经销商通过一个单独的“控制”队列:
那么经销商创建一个准备好了每个可用线程的消息:
经销商存储这些信息。当消息到达经销商时,它使用先前存储的信息来找到一个自由工作者节点,并向其发送消息。是免费的,如果没有工人节点重复前面步骤前的经销商等。
所有悬而未决的工作呆在经销商的队列(而不是建立在每个工人的队列),使能见度的消息实际上是等待多久。这是重要的遵守基于时间的服务水平协议(sla)。
监控的更多信息,请参阅监控NServiceBus端点.
关于Pub / Sub的更多信息在经销商的情况下看到的什么经销商和对任何出版商节点一样
经销商配置
当主机在NServiceBus.Host.exe端点
如果您正在运行NServiceBus.Host.exe,下面的配置文件开始您的端点与分配器的功能:
开始你的端点作为经销商确保您安装NServiceBus.Distributor。MSMQ NuGet然后从命令行运行主机,如下:
NServiceBus.Host.exe NServiceBus.MSMQDistributor
或者使用一个版本早于NServiceBus的v4.3中:
NServiceBus.Host.exe NServiceBus.Distributor
NServiceBus。(MSMQ)经销商资料指示NServiceBus框架开始一个经销商在这个端点,等待工人争取。与NServiceBus。NServiceBus(MSMQ)主剖面。(MSMQ)经销商概要节点不执行一个工人。
您可以使用NServiceBus。(MSMQ)主开始一个分销商在端点与工人在其端点。开始你的端点作为主人确保您安装NServiceBus.Distributor。MSMQ NuGet然后从命令行运行主机,如下:
NServiceBus.Host.exe NServiceBus.MSMQMaster
或者使用一个版本早于NServiceBus的v4.3中:
NServiceBus.Host.exe NServiceBus.Master
当用到
当你自我主机你的端点,使用这个配置:
v5 V4 v3.3var configuration = new BusConfiguration();
// --------------------------------------
// Running the Distributor and a Worker
configuration.AsMSMQMasterNode();
//or
configuration.RunMSMQDistributor();
// --------------------------------------
// --------------------------------------
// Running the Distributor only
configuration.RunMSMQDistributor(false);
// --------------------------------------
在版本4和使用使用NServiceBus.Distributor。MSMQ NuGet.
人员配置
任何NServiceBus端点都可以作为一个工人节点运行。来激活它,创建一个处理程序相关的信息和保证 app.config
经销商的文件包含路由信息。
当主机在NServiceBus.Host.exe
如果你举办与NServiceBus.Host端点。exe运行作为一个工人,使用这个命令行:
NServiceBus.Host.exe NServiceBus.MSMQWorker
或者使用一个版本早于NServiceBus的v4.3中:
NServiceBus.Host.exe NServiceBus.Worker
配置主节点服务器的名称所示 app.config
的例子。注意 MasterNodeConfig
部分:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- Other sections go here -->
<section name="MasterNodeConfig" type="NServiceBus.Config.MasterNodeConfig, NServiceBus.Core" />
</configSections>
<!-- Other config options go here -->
<MasterNodeConfig Node="MachineWhereDistributorRuns"/>
</configuration>
读到的 DistributorControlAddress
和 DistributorDataAddress
在路由与经销商部分。
当用到
如果你用到这里端点所需的代码与经销商争取端点。
v5 V4 v3.3var configuration = new BusConfiguration();
configuration.EnlistWithMSMQDistributor();
在版本4和使用使用NServiceBus.Distributor。MSMQ NuGet.
类似于自我托管,保证 app.config
职工的包含 MasterNodeConfig
指节主节点的主机名(经销商)正在运行。
路由与经销商
经销商为其运行时使用了两个队列的操作。的 DataInputQueue
是客户端进程队列发送他们适用的消息。的ControlInputQueue
就是工人的队列节点发送控制消息。
使用价值以外的NServiceBus违约可以覆盖它们,如所示 UnicastBusConfig
部分如下:
<UnicastBusConfig DistributorControlAddress="distributorControlBus@Cluster1" DistributorDataAddress="distributorDataBus@Cluster1">
<MessageEndpointMappings>
<!-- regular entries -->
</MessageEndpointMappings>
</UnicastBusConfig>
如果不存在这些设置,控制队列是假定的端点名称工人,连接的 distributor.control@HostWhereDistributorIsRunning
字符串。
类似于标准NServiceBus路由,您不希望高优先级消息困在低优先级的消息,所以就像你有单独的NServiceBus过程不同的消息类型,你也设置不同的经销商实例(有单独的队列)不同的消息类型。
在这种情况下,名称的队列和消息一样。例如, SubmitPurchaseOrder.StrategicCustomers.Sales
。这是经销商的数据队列的名称和输入队列的每个工人。经销商的控制队列是最好的命名前缀为“控制”,如下:Control.SubmitPurchaseOrder.StrategicCustomers.Sales
.
当使用部署一个完整的发布/订阅的经销商,你看到的是一个分销商在每个用户平衡负载的事件被发表,如下:
记住,经销商是专为负载平衡在一个网站,网站之间的所以不要使用它。在上面的图片中,发布者和订阅者都是在单个物理站点。关于使用NServiceBus在多个物理网站的信息,明白了网关.
高可用性
如果经销商宕机了,即使工人节点保持运行,他们不会收到任何消息。因此,重要的是要在集群上运行的经销商,有其队列配置为集群资源。
因为经销商不做CPU或内存密集型的工作,通常可以把几个经销商过程在同一集群服务器。请注意网络IO经销商可能会成为瓶颈,所以考虑消息的大小和吞吐量上浆基础设施。