發佈/訂閱配置

發佈/訂閱配置 的部分入口聲明消息= "消息"意味着組裝」消息。dll包含消息模式」。特定類型能夠配置使用限定名稱: namespace.type, assembly. 聲明部分端點= " messagebus "告訴訂閱者的總線對象,出版商接受訂閱請求隊列。隊列名稱「messagebus」簡稱「隊列命名messagebus在本地機器上」。來表示一個隊列在遠程機器上,使用相似於電子郵件的格式:MessageBus@RemoteServer。 點擊這裏更多配置選項相關的消息映射到端點。 然而,每一個過程的輸入隊列並須要在同一臺機器上的進程。 在這一點上,公共汽車用戶過程當中知道的消息模式和端點出版商願意接受訂閱請求。總線對象而後會看到應用程序代碼在用戶但願處理這些信息,併發送一個訂閱請求的端點。 訂閱的意圖 應用程序代碼在用戶處��信息發佈者發佈的實現(IHandleMessages NServiceBus界面,如圖所示: 處理消息 這個接口須要單一的處理方法接受一個參數相同的類型中聲明的類繼承。忽視如今的方法,由於它的身體沒有影響發佈/訂閱是如何工做的。 自從消息處理(EventMessage)屬於之前描述的消息組件(Messages.dll)和訂閱者的總線知道這些消息屬於出版商從app.config(上圖),惟一的方法,處理能夠處理消息屬於別人對他們來講是一個訂戶,總線自動訂閱。這是它是如何工做的。 消息傳遞機制 訂閱 訂戶訂閱的出版商的總線發送消息的隊列的配置 部分如上所述。在消息中,總線包括消息的類型和用戶的輸入隊列。當公共汽車在出版商端收到這個消息,它存儲的信息。 重要的是要明白,每一個出版商負責本身的信息。不必定有邏輯上中央代理商店全部的東西,儘管NServiceBus容許配置全部出版商信息存儲在一箇中央位置,如數據庫。 用戶也能夠是一個出版商。它很簡單,一個給定的過程是一個出版商。 如何成爲一個出版商 代表一個給定的過程是一個出版商,引用NServiceBus總成和寫一個實現類 IConfigureThisEndpoint和AsAPublisher以下所示。 上面的三個NServiceBus程序集引用、參考log4net,這是開源庫,用於日誌記錄。在NServiceBus日誌配置比標準log4net模型略有不一樣。 設置一個出版商 忽略ISpecifyMessageHandlerOrdering如今的接口。 訂閱存儲 NServiceBus在內部設置存儲訂閱信息被放置的地方。默認狀況下,NServiceBus將該信息存儲在RavenDB但也有內置的存儲選項的MSMQ和關係數據庫和在內存中。你不須要指定這個代碼或配置。看到NServiceBus概要文件是如何工做的得到更多信息。 默認狀況下,用戶存儲在一隻烏鴉具備相同名稱的數據庫做爲您的端點。訂閱爲每一個消息類型存儲在「訂閱」做爲一個文檔集合。 配置MSMQ訂閱存儲: public class ConfigureMsmqSubscriptionStorage : INeedInitialization { public void Init() { Configure.Instance.MsmqSubscriptionStorage(); } } 你不須要任何配置更改成此,NServiceBus自動使用一個隊列稱爲「{您的端點名稱} .Subscriptions」。可是若是你想指定隊列用來保存訂閱本身,添加如下配置節和後續的配置項:
多臺機器共享相同的訂閱存儲,不使用上述MSMQ選項;相反,使用任何描述的數據庫支持的商店在這個頁面。 配置一個關係數據庫做爲您的訂閱存儲,只是引用 NServiceBus.NHibernate.dll並添加: public class ConfigureNHibernateSubscriptionStorage : INeedInitialization { public void Init() { //Usage for V3 Configure.Instance.DBSubcriptionStorage(); //Usage for V4 Configure.Instance.UseNHibernateSubscriptionPersister(); } } 這個選項須要出如今你的配置,如下爲V3:
V4和: 若是你不想在你的配置全部這些信息,你能夠指定代碼的過載 DBSubscriptionStorage的方法,該方法接受一個字典NHibernate屬性上面。 額外的 autoUpdateSchema'參數,若是設置爲「真正的」,告訴NServiceBus配置數據庫中建立必要的表來存儲訂閱信息。這個表被稱爲「訂閱」,有兩列,「SubscriberEndpoint」和「MessageType」;他們的varchar和。 閱讀更多信息NHibernate配置,特別是表3.1和3.5節的可選的配置選項。表3.3能夠幫助您配置像Oracle這樣的其餘數據庫和MySQL。 如何發佈? 發佈一條消息,您須要一個引用到總線對象在您的代碼中。在pub / sub樣本,這個代碼的 ServerEndpoint類在服務器項目,如圖所示: public class HandlerThatPublishedEvent : IHandleMessages { public IBus Bus { get; set; } public void Handle(MyMessage message) { Bus.Publish (e => { e.SomeProperty = "xyz"; }); } } 「公共汽車」屬性將自動由基礎設施。這就是所謂的「依賴注入」。全部開發完成了NServiceBus利用這些模式。技術做爲NServiceBus是可插拔的依賴注入容器,有五個選項,Autofac是默認的。 在「運行」方法中,事件消息的建立。這能夠簡單實例化相關的類或使用總線對象實例化信息定義爲接口。閱讀更多信息是否使用接口或類來表示信息 . 一旦建立了事件消息對象,調用 Bus.Publish(eventMessage);講述了總線對象有給定的消息發送到全部類型的消息的用戶表示有興趣。演練中咱們看到,若是一個用戶不可用,他們的消息並不失去他們存儲,直到用戶回來在線。看到的存儲和轉發消息的部分架構原則NServiceBus的更多信息。 安全與受權 你可能不想讓任何端點訂閱一個給定的出版商或事件。NServiceBus提供了一種方法讓你介入訂閱過程和決定是否應該容許給定客戶端訂閱一個給定的消息。你能夠看到的 SubscriptionAuthorizer類在服務器項目。 類的實現 IAuthorizeSubscriptions接口,它須要 AuthorizeSubscribe和 AuthorizeUnsubscribe方法。實現樣品的不作,返回true。在實際的項目中,你可能會得到一些訪問控制系統,活動目錄,或者只是一個數據庫來決定是否應該容許行動。 版本管理訂閱 在NServiceBus V3.0和開始訂閱類型相同的主要版本是兼容的。這意味着一個訂閱MyEvent 1.1.0將被認爲是有效MyEvent 1. x。Y。 V2。X須要一個完美的匹配。這將使它更容易升級你的出版商而不影響用戶。 最佳實踐 當你告訴NServiceBus消息事件,該框架能夠幫助您執行最好的消息傳遞實踐僅容許您總線。發佈|訂閱|取消訂閱事件。其餘電話致使異常。更多關於最佳實踐 . 正如您能夠看到的,有不少底層。NServiceBus可讓您徹底控制消息交換的每一部分而抽象底層技術。嘗試修改樣品,添加你本身的消息處理程序,調試經過各個部分獲得更好的感受。
相關文章
相關標籤/搜索