ABP vNext分佈式事件總線RabbitMQ注意事項

[https://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"
   }
 }
}

遠程主機配置

集羣用逗號分隔

{
  "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不支持,源碼如下:


注意事項

  • A服務=》B服務=》C服務,傳輸對象1與傳輸對象2不能是同一個命名空間下的同一個類名,這是由於ABP vNext EventBus底層將完整類名作爲路由鍵進行轉發,如果兩個對象一致,那麼B將進入死循環,附帶C也進入異常

  • A、B、C之間應該共用同一個交換機,即配置的ExChangeName一致,而隊列名不一致

  • 不存在自己指定自己作爲生產者的隊列的名字,所以必須先啓動隊列消費者創建了相關隊列,隊列生產者發出Message纔有效果,即啓動順序:C=>B=>A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章