ABP vNext EventBus For RabbitMQ 分散式事件匯流排使用注意事項_補充官網文檔
[//docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文檔鏈接),基本使用可直接閱讀官方文檔,雲懷不重複造輪子,只做官方未提到但重要的說明
關鍵配置說明
關鍵配置類:AbpRabbitMqEventBusOptions.cs
用於配置連接名、隊列名即要監聽的隊列名、交換機名;
關鍵配置類:AbpRabbitMqOptions
即原始RabbitMq針對.NET的連接配置類:RabbitMqConnections.cs
關鍵配置——appsettings.json
本地連接配置
"RabbitMQ": {
"EventBus": {
"ClientName": "MyClientName",
"ExchangeName": "MyExchangeName"
}
}
遠程主機配置
集群用逗號分隔
"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不支援,源碼如下:
注意事項
- A服務=》B服務=》C服務,傳輸對象1與傳輸對象2不能是同一個命名空間下的同一個類名,這是由於ABP vNext EventBus底層將完整類名作為路由鍵進行轉發,如果兩個對象一致,那麼B將進入死循環,附帶C也進入異常
- A、B、C之間應該共用同一個交換機,即配置的ExChangeName一致,而隊列名不一致
- 不存在自己指定自己作為生產者的隊列的名字,所以必須先啟動隊列消費者創建了相關隊列,隊列生產者發出Message才有效果,即啟動順序:C=>B=>A