1. 程式人生 > >ABP vNext EventBus For RabbitMQ 分散式事件匯流排使用注意事項_補充官網文件

ABP vNext EventBus For RabbitMQ 分散式事件匯流排使用注意事項_補充官網文件

![](https://img2020.cnblogs.com/blog/2193154/202101/2193154-20210109141150930-150842908.png) [https://docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文件連結),基本使用可直接閱讀官方文件,雲懷不重複造輪子,只做官方未提到但重要的說明 ## 關鍵配置說明 ### 關鍵配置類:AbpRabbitMqEventBusOptions.cs 用於配置連線名、佇列名即要監聽的佇列名、交換機名; ![](https://img2020.cnblogs.com/blog/2193154/202101/2193154-20210109141643271-138894472.png) ### 關鍵配置類:AbpRabbitMqOptions 即原始RabbitMq針對.NET的連線配置類:RabbitMqConnections.cs ![](https://img2020.cnblogs.com/blog/2193154/202101/2193154-20210109141948315-1188499427.png) ## 關鍵配置——appsettings.json ### 本地連線配置 ``` "RabbitMQ": { "EventBus": { "ClientName": "MyClientName", "ExchangeName": "MyExchangeName" } } ``` ### 遠端主機配置 叢集用逗號分隔 ```"RabbitMQ": { "Connections": { "Default": { "HostName": "192.168.1.101:5701,ip2:port2,ip3:port3", "UserName": "yunhuai", "Password": "yunhuai", "VirtualHost": "/test" } }, "EventBus": { "ClientName": "MsDemo_AServer", "ExchangeName": "MsDemo" } } ``` ### 多主機 若應用程式有多個主機,指定其中之一為EventBus ``` { "RabbitMQ": { "Connections": { "Default": { "HostName": "123.123.123.123" }, "SecondConnection": { "HostName": "321.321.321.321" } }, "EventBus": { "ClientName": "MyClientName", "ExchangeName": "MyExchangeName", "ConnectionName": "SecondConnection" } } } ``` ## ABP vNext 底層限制 * 交換機只支援direct路由,原RabbitMQ可配置 * 交換機和佇列強行持久化,原RabbitMQ可配置 * 當所有繫結佇列都不在了,交換機也強制可不自動刪除,原RabbitMQ可配置 * 強制不可申明排他性佇列,排他性佇列特徵:只對首次申明佇列的連線可見並會在該連線斷開時自動刪除,原RabbitMQ可配置 * 當所有消費者斷開後,強制不會刪除該佇列,原RabbitMQ可配置 備註:以上皆因原始碼寫死,並非RabbitMQ不支援,原始碼如下: ![](https://img2020.cnblogs.com/blog/2193154/202101/2193154-20210109143026989-1432636251.png) ## 注意事項 ![](https://img2020.cnblogs.com/blog/2193154/202101/2193154-20210109143103391-1918855474.png) * A服務=》B服務=》C服務,傳輸物件1與傳輸物件2不能是同一個名稱空間下的同一個類名,這是由於ABP vNext EventBus底層將完整類名作為路由鍵進行轉發,如果兩個物件一致,那麼B將進入死迴圈,附帶C也進入異常 * A、B、C之間應該共用同一個交換機,即配置的ExChangeName一致,而佇列名不一致 * 不存在自己指定自己作為生產者的佇列的名字,所以必須先啟動佇列消費者建立了相關佇列,佇列生產者發出Message才有效果,即啟動順序:C=>B=>A