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經銷商可能會成爲瓶頸,因此考慮消息的大小和吞吐量上漿基礎設施。