上一篇已經講了Rabbitmq如何在Windows平臺安裝,還不瞭解如何安裝的朋友,請看我前面幾篇文章:RabbitMQ學習系列一:windows下安裝RabbitMQ服務 , 今天就來聊聊 C# 實際開發的過程中,怎麼呼叫RabbitMQ,訂閱和釋出訊息。
一、客戶端
RabbitMQ。Client 是rabbitmq 官方提供的的客戶端,。net 版本地址 :http://www。rabbitmq。com/dotnet。html
EasyNetQ 是基於RabbitMQ。Client 基礎上封裝的開源客戶端。使用非常方便。地址:http://easynetq。com/ 。 本篇所使用示例程式碼下載地址: demo示例下載 。
RabbitMQ 還有很多其他客戶端API,都非常的好用。我們在一邊,一直用的都是 EasyNetQ,所以這裡的 demo 只介紹 EasyNetQ 客戶端實現。其他的客戶端,大家自己去研究吧。
二、專案結構
說明:上圖我們看到,由 Producer(生成者) 和 Consumer(消費者) 兩部分組成。Weiz。Consumer 就是Consumer(消費者),Weiz。 Producer 為 Producer(生成者),Weiz。MQ 為訊息佇列的通用處理類庫。
三、如何實現
首先建立Weiz。MQ 專案,Weiz。MQ 是訊息佇列的通用處理類庫,用於建立的RabbitMQ連線、傳送和訂閱訊息等功能。
1、增加BusBuilder。cs管道建立類,主要負責連結Rabbitmq。
using System;using System。Configuration;using EasyNetQ;namespace Weiz。MQ{ ///
2、增加IProcessMessage介面
主要是定義了一個ProcessMsg訊息方法,用於訊息傳遞。
using System;using System。Collections。Generic;using System。Linq;using System。Text;namespace Weiz。MQ{ public interface IProcessMessage { void ProcessMsg(Message msg); }}
3、增加Message類,定義了訊息傳遞的實體屬性欄位等資訊
using System;using System。Collections。Generic;using System。Linq;using System。Text;namespace Weiz。MQ{ public class Message { public string MessageID { get; set; } public string MessageTitle { get; set; } public string MessageBody { get; set; } public string MessageRouter { get; set; } }}
4、增加MQHelper類,用於正在的訂閱和釋出訊息。
using System;using System。Collections。Generic;using System。Linq;using System。Text;using System。Configuration;using EasyNetQ;namespace Weiz。MQ{ public class MQHelper { ///
然後,建立生產者Weiz。Producer工程
在Weiz。Producer工程中,建立一個aspx 頁面,用於傳送訊息,增加如下程式碼:
using System;using System。Collections。Generic;using System。Linq;using System。Web;using System。Web。UI;using System。Web。UI。WebControls;using Weiz。MQ;namespace Weiz。Producer{ public partial class TestMQ : System。Web。UI。Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { Message msg = new Message(); msg。MessageID = “1”; msg。MessageBody = DateTime。Now。ToString(); msg。MessageTitle = “1”; msg。MessageRouter = “pcm。notice。zhangsan”; MQHelper。Publish(msg); } }}
程式碼說明:
“pcm。notice。zhangsan”,是訂閱的訊息路由。
最後、建立消費者Weiz。Consumer 工程,也就是Consumer(消費者)
1 。 新增OrderProcessMessage。cs
using System;using System。Collections。Generic;using System。Linq;using System。Web;namespace Weiz。Consumer{ public class OrderProcessMessage:MQ。IProcessMessage { public void ProcessMsg(MQ。Message msg) { Console。WriteLine(msg。MessageBody); } }}
2。 Program 增加如下程式碼
using System;using System。Collections。Generic;using System。Linq;using System。Text;using System。Threading。Tasks;namespace Weiz。Consumer{ class Program { static void Main(string[] args) { OrderProcessMessage order = new OrderProcessMessage(); MQ。Message msg = new MQ。Message(); msg。MessageID = “1”; msg。MessageRouter = “pcm。notice。zhangsan”; MQ。MQHelper。Subscribe(msg, order); } }}
程式碼說明:
1、這裡就是訂閱一個訊息路由,pcm。notice。zhangsan
2、還需要注意的是:一般是先啟動消費者,建立對應的訊息路由和佇列。
四、執行測試
1、首先啟動 Weiz。Consumer (消費者),啟動消費者,這樣會自動在RabbitMQ 伺服器上建立相關的exchange 和 queue 。
Consumer 消費者,使用的是Subscribe (訂閱)的模式,所以,Weiz。Consumer客戶端啟動後,會自動建立connection,生成相關的exchange 和queue。
2、啟動Weiz。 Producer 裡的TestMQ。aspx 頁面,往佇列裡面寫一條訊息。訂閱的消費者立馬就能拿到這條訊息。
上圖可以看到,消費者順利收到了一條訊息。
最後
至此,C#向Rabbitmq訊息佇列傳送訊息已經簡單完成。需要完整程式碼可以私信我(
章為忠學架構
),回覆:
rabbitmq
即可。
推薦閱讀:
RabbitMQ學習系列(二): RabbitMQ的安裝與配置管理後臺
RabbitMQ學習系列(一): RabbitMQ快速入門