.Net Core3.x 中集成RabbitMQ

        在項目開發中,有時候需要用到消息隊列技術進行處理,這樣可以提升系統的相應速度以及處理速度,今天我們就來集成其中的一款消息隊列框架RabbitMQ,首先我們簡答介紹下RabbitMQ(熟悉的朋友可以直接跳過這段介紹)

       RabbitMQ 中有5種模式,簡單隊列模式、Work模式,路由模式,主題模式,發佈訂閱模式。

      1.簡單隊列:一個生產者對應一個消費者,一對一的關係。

      2.work 模式:一個生產者對應多個消費者,但是隻有一個消費者可以獲得到消息。

      3.路由模式:生產者將消息發送到direct交換器,在綁定隊列和交換器的時候有一個路由key,生產者發送的消息會指定一個路                               由key,那麼消息只會發送到相應key相同的隊列,接着監聽該隊列的消費者消費信息。

      4.主題模式:路由模式根據路由key進行完整的匹配(完全相等才發送消息),這裏的通配符模式通俗的來講就是模糊匹配。

      5.發佈訂閱模式:一個消費者將消息首先發送到direct交換器,交換器綁定多個隊列,然後被監聽該隊列的消費者所接收並消費,

                                 交換器有四種類型:direct,fanout,topic,headers

      在項目中使用,一般使用後3中模式,此處我使用的是路由模式,交換器的類型選擇的是direct。下邊我們開始進行集成。

一、在項目中添加引用RabbitMQ.Client

       直接在nuget 中搜索,選擇最新的版本添加在項目引用中即可,不在贅述。

二、生產者代碼

      生產者就是消息的發送端,既然是在項目中集成,我們就需要編寫一個生產者的工具類,外部直接調用接口放入消息即可,具體代碼如下

     

    簡單介紹下代碼

        1.IBaseDependency是一個空接口,因爲我的項目中使用了autofac ,爲了可以使用屬性注入。可以不繼承接口

        2.logger是我的項目中採用了nlog 日誌框架,沒有使用.netCore 自帶的日誌框架

        3.RabbitMQClient構造函數這裏,我們採用了構造注入,打開創建一個信道Channel

        4.PushMessage是對外暴露的方法,需要傳遞三個參數,分別是消息內容,交換機名稱和關鍵字key

        5.消息隊列裏邊的消息要確保在消費之前不能丟失,所以要設置爲可持久化,所以我們要設置交換機和信道都要持久化,代碼如下所示

      6.消費者拿到消息後需要手動返回一個ack確認,所以交換機在聲明的時候設置爲手動確認模式,需要設置autoDelete 爲false如下圖所示,

三、消費者代碼

      在編寫消費者代碼之前需要說明一點:項目中我們希望消費者可以跟隨我們的項目一起啓動,並且可以一直運行,類似於windowsService 服務,但是WindowsService又不能跨平臺,所以我們就使用了NetCore 自帶的可後臺定時執行任務的方法,其實很簡單,集成實現一個接口IHostedService(Microsoft.Extensions.Hosting類下),顯示實現接口中的方法即可。因爲我們的消費者不可能只有一個類,可能有很多種,所以此處我們也寫了一個消費者的基類RabbitListener,具體消費者實現該基類即可,基類的代碼如下

簡單介紹代碼

1.和生產者一樣,在實例化消費者對象時候,打開消息隊列,打開信道

2.IHostedService需要顯示實現他的接口,只有兩個 StartAsync 和 StopAsync,通過方法名稱,可以清楚的知道,StartAsync裏邊的代碼就是服務啓動的時候運行的代碼

3.Register方法裏邊的代碼就是消費者代碼,我們聲明瞭可持久化的隊列,並且設置消費者每次只能消費一個消息,在消費成功後,手動返回確認Ack

4.Process是我們定義的虛方法,實例類中複寫該方法就可以執行相應的代碼。

5.TestLister 繼承了RabbitListener,TestLister 就是我們的實例方法

四、修改StartUp.cs

在ConfigureServices裏邊添加以下代碼

啓動程序,我們自已定義的服務就可以運行成功了,集成rabbitMQ 成功。

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