RabbitMQ學習系列二:.net 環境下 C#程式碼使用 RabbitMQ 訊息佇列

龐順龍發表於2019-05-11

上一篇已經講了Rabbitmq如何在Windows平臺安裝,不懂請移步:RabbitMQ學習系列一:windows下安裝RabbitMQ服務 

一、理論:

.net環境下,C#程式碼呼叫RabbitMQ訊息佇列,本文用easynetq開源的.net Rabbitmq api來實現。

EasyNetQ 是一個易於使用的RabbitMQ的.Net客戶端API。

RabbitMQ 是由 LShift 提供的一個 Advanced Message Queuing Protocol (AMQP) 的開源實現,由以高效能、健壯以及可伸縮性出名的 Erlang 寫成,因此也是繼承了這些優點。

AMQP 裡主要要說兩個元件:Exchange 和 Queue (在 AMQP 1.0 裡還會有變動),

如下圖所示,綠色的 X 就是 Exchange ,紅色的是 Queue ,這兩者都在 Server 端,又稱作 Broker ,

這部分是 RabbitMQ 實現的,而藍色的則是客戶端,通常有 Producer 和 Consumer 兩種型別:

二、asp.net專案搭建

1、新建專案(略)

2、專案nuget需要使用的三方dll,本文案例使用的版本如下圖

3、訊息佇列類庫結構說明

4、BusBuilder.cs管道建立類,主要負責連結Rabbitmq

/// <summary>
/// 訊息伺服器聯結器
/// </summary>
public class BusBuilder
{
    public static IBus CreateMessageBus()
    {
        //訊息伺服器連線字串
        var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"];
        if (connectionString == null || connectionString.ConnectionString == string.Empty)
        {
            throw new Exception("messageserver connection string is missing or empty");
        }
        return RabbitHutch.CreateBus(connectionString.ConnectionString);
    }
}
5、IProcessMessage類,定義了一個訊息方法,用於訊息傳遞
public interface IProcessMessage
{
    void ProcessMsg(Message msg);

    void Notice();
}
6、Message類,定義了訊息傳遞的實體屬性欄位等資訊
public class Message
{
    public string MessageID { get; set; }
    
    public string MessageTitle { get; set; }

    public string MessageBody { get; set; }

    public string MessageRouter { get; set; }
}
7、MQHelper類,負責建立訊息管道、建立訊息管道、傳送訊息體等工作
/// <summary>
/// 傳送訊息
/// </summary>
public static void Publish(Message msg)
{
    //// 建立訊息bus
    IBus bus = BusBuilder.CreateMessageBus();
    try
    {
        using (var publishChannel = bus.OpenPublishChannel())   //建立訊息管道 
        {
            publishChannel.Publish(msg, x => x.WithTopic(msg.MessageRouter));  //通過管道傳送訊息 
        }
    }
    catch (EasyNetQException ex)
    {
        //處理連線訊息伺服器異常 
    }
    bus.Dispose();//與資料庫connection類似,使用後記得銷燬bus物件
}
8、web專案進行呼叫後臺訊息佇列方法
RabbitMQ.Message msg = new RabbitMQ.Message();
msg.MessageID = "test";
msg.MessageBody = DateTime.Now.ToString();
msg.MessageTitle = "test";
msg.MessageRouter = "pcm.notice.zhangsan";
RabbitMQ.MQHelper.Publish(msg);

這樣就可以用c#傳送訊息到佇列中,測試結果如下圖:

檢視佇列下的訊息記錄

獲取佇列訊息嘗試

至此,C#向Rabbitmq訊息佇列傳送訊息已經簡單完成

下一篇:C#訂閱訊息、獲取訊息的方式,敬請期待。。。



請喊我大龍哥最後編輯於:3年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章