RabbitMQ學習系列二:.net 環境下 C#代碼使用 RabbitMQ 消息隊列


上一篇已經講了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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <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類,定義了一個消息方法,用於消息傳遞

1
2
3
4
5
6
public interface IProcessMessage
{
     void ProcessMsg(Message msg);
 
     void Notice();
}

6、Message類,定義了消息傳遞的實體屬性字段等信息

1
2
3
4
5
6
7
8
9
10
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類,負責創建消息管道、創建消息管道、發送消息體等工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <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項目進行調用后台消息隊列方法

1
2
3
4
5
6
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#訂閱消息、獲取消息的方式,敬請期待。。。

 

附件: RabbitMQ.rar 下載 (下載需要:0 個80幣)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM