上一篇已經講了Rabbitmq如何在Windows平臺安裝,還不瞭解如何安裝的朋友,請看我前面幾篇文章:RabbitMQ學習系列一:windows下安裝RabbitMQ服務 , 今天就來聊聊 C# 實際開發的過程當中,怎麼調用 用RabbitMQ。html
1、客戶端 數據庫
RabbitMQ.Client 是rabbitmq 官方提供的的客戶端,net 版本地址 :http://www.rabbitmq.com/dotnet.html windows
EasyNetQ 是基於RabbitMQ.Client 基礎上封裝的開源客戶端。使用很是方便。地址:http://easynetq.com/ 。 本篇所使用示例代碼下載地址: demo示例下載 。服務器
RabbitMQ 還有不少其餘客戶端API,都很是的好用。咱們在一邊,一直用的都是 EasyNetQ,因此這裏的 demo 只介紹 EasyNetQ 客戶端實現。其餘的客戶端,你們本身去研究吧。ide
2、項目結構學習
說明:前面咱們提到過,RabbitMQ由 Producer(生成者) 和 Consumer(消費者) 兩部分組成。Weiz.Consumer 就是Consumer(消費者),Weiz. Producer 爲 Producer(生成者),Weiz.MQ 爲消息隊列的通用處理類庫。ui
3、項目搭建spa
1. Weiz.MQ 項目,消息隊列的通用處理類庫,用於正在的訂閱和發佈消息。3d
1. 經過nuget安裝項目EasyNetQ 相關組件, (略)code
2. 增長BusBuilder.cs管道建立類,主要負責連接Rabbitmq。
using System; using System.Configuration; using EasyNetQ; namespace Weiz.MQ { /// <summary> /// 消息服務器鏈接器 /// </summary> public class BusBuilder { public static IBus CreateMessageBus() { // 消息服務器鏈接字符串 // var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"]; string connString = "host=192.168.98.107:5672;virtualHost=OrderQueue;username=zhangweizhong;password=weizhong1988"; if (connString == null || connString == string.Empty) { throw new Exception("messageserver connection string is missing or empty"); } return RabbitHutch.CreateBus(connString); } } }
3. 增長IProcessMessage類,定義了一個消息方法,用於消息傳遞
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Weiz.MQ { public interface IProcessMessage { void ProcessMsg(Message msg); } }
4. 增長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; } } }
5. 增長MQHelper類,用於正在的訂閱和發佈消息。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using EasyNetQ; namespace Weiz.MQ { public class MQHelper { /// <summary> /// 發送消息 /// </summary> public static void Publish(Message msg) { //// 建立消息bus IBus bus = BusBuilder.CreateMessageBus(); try { bus.Publish(msg, x => x.WithTopic(msg.MessageRouter)); } catch (EasyNetQException ex) { //處理鏈接消息服務器異常 } bus.Dispose();//與數據庫connection相似,使用後記得銷燬bus對象 } /// <summary> /// 接收消息 /// </summary> /// <param name="msg"></param> public static void Subscribe(Message msg, IProcessMessage ipro) { //// 建立消息bus IBus bus = BusBuilder.CreateMessageBus(); try { bus.Subscribe<Message>(msg.MessageRouter, message => ipro.ProcessMsg(message), x => x.WithTopic(msg.MessageRouter)); } catch (EasyNetQException ex) { //處理鏈接消息服務器異常 } } } }
2. RabbitMQ由 Producer(生成者)
1. 建立一個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); } } }
3. 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); } } }
4、運行
1. 啓動 Weiz.Consumer (消費者),啓動消費者,會自動在RabbitMQ 服務器上建立相關的exchange 和 queue 。
Consumer 消費者,使用的是Subscribe (訂閱)的模式,因此,Weiz.Consumer客戶端啓動後,會自動建立connection,生成相關的exchange 和queue。
2. 啓動Weiz. Producer 裏的TestMQ.aspx 頁面,往隊列裏面寫一條消息。訂閱的消費者立馬就能拿到這條消息。
至此,C#向Rabbitmq消息隊列發送消息已經簡單完成。
查看RabbitMQ 系列其餘文章,http://www.cnblogs.com/zhangweizhong/category/855479.html