NServiceBus经销商相似行为的标准负载平衡器。它是透明的扩展的关键消息处理在许多机器。数据库
做为标准NServiceBus过程当中,经销商维护全部NServiceBus的容错和性能特征,但设计不压倒任何职工的节点配置来接收工做。服务器
扩展(有或没有一个分销商)对所作的工做仅仅是有用的一台机器须要时间,所以帮助更多的计算资源。帮助,监控CriticalTime性能计数器端点和当你有须要添加的分销商。使用经销商在须要的时候扩展是由不容易改变代码,刚刚开始相同的端点在经销商和职工档案,本文解释了。网络
分销商是否适用只有当使用MSMQ传输交换消息。NServiceBus使用MSMQ做为默认的运输。经销商不须要使用等代理传输和RabbitMQ状态"置疑"时,由于它们共享相同的队列,即便有多个端点的实例运行。NServiceBus将确保只有其中一个的实例,在这种状况下,端点将处理信息。app
当开始使用NServiceBus时,您将看到,您能够很容易地运行多个实例相同的过程相同的输入队列。这可能看起来像外扩,但真的是没有运行多个不一样的线程在相同的过程。你会发现你不能在多台计算机共享一个输入队列。框架
经销商在这个限制。性能
MSMQ的版本4,2008年与Vista和服务器可用,能够执行远程事务接收。这意味着过程在其余机器上能够以事务的方式把工做从一个队列在不一样的机器上。若是处理消息的机器崩溃,消息回滚到队列和其余机器能够处理它。网站
尽管分销商提供相似的功能甚至在Vista发布以前,还有其余缘由使用它甚至在新的操做系统。“远程事务接收”的问题是,当多个工做节点时,它会随之变慢。这是因为管理的开销更多的事务,以及长时间,这些交易是开放的。操作系统
简而言之,扩展MSMQ V4的好处自己是至关有限的。命令行
经销商作多个操做对于每一个消息,它是处理(接收一个现成的消息造成一个工人,发送消息��工人工做,接收一个现成的消息后加工),其性能是有限的虽然作不多的工做,所以使用一个经销商的好处是更适合较长时间运行的工做单元(高I / O和http调用同样,写入磁盘)而不是很是短暂的工做单元(快速从数据库读取和分派消息使用 Bus.Send
或 Bus.Publish
)线程
为了了解你预期的性能可分为常规端点性能和除以4。
若是您须要规模小的工做单元你可能想考虑较小的垂直部分切片处理程序的功能和部署他们本身的终点。
工做者节点将消息发送到经销商,告诉它当他们准备工做。这些消息到达经销商经过一个单独的“控制”队列:
那么经销商建立一个准备好了每一个可用线程的消息:
经销商存储这些信息。当消息到达经销商时,它使用先前存储的信息来找到一个自由工做者节点,并向其发送消息。是免费的,若是没有工人节点重复前面步骤前的经销商等。
全部悬而未决的工做呆在经销商的队列(而不是创建在每一个工人的队列),使能见度的消息其实是等待多久。这是重要的遵照基于时间的服务水平协议(sla)。
监控的更多信息,请参阅监控NServiceBus端点.
关于Pub / Sub的更多信息在经销商的状况下看到的什么经销商和对任何出版商节点同样
若是您正在运行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
当你自我主机你的端点,使用这个配置:
var 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.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
在路由与经销商部分。
若是你用到这里端点所需的代码与经销商争取端点。
var 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经销商可能会成为瓶颈,因此考虑消息的大小和吞吐量上浆基础设施。