RabbitMQ初探--用C#實現通訊服務
阿新 • • 發佈:2018-07-13
download gin summary color 發送消息 sta 過程調用 change rod
MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。
消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用(例如上篇文章說到的Thrift)的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。
來,我們開始進入初探的大門。
第一步:
當然是下載相關東西。
因為RabbitMQ是由erlang實現的,所以需要先安裝erlang。
下載erlang並安裝,目前最新版本是21.0.1。
再下載RabbitMQ-server並安裝,目前最新版本是3.7.7。
第二步:
用VisualStudio創建兩個如下程序集(控制臺程序),ConsumerClient(消費端)、ProducerClient(生產端)。
第三步:
兩個程序集都用NuGet添加EasyNetQ引用,EasyNetQ是RabbitMQ官方封裝好的一個組件,利用它可以更方便的使用RabbitMQ。當然EasyNetQ會依賴於RabbitMQ.Client,所以你添加EasyNetQ引用的同時,也會添加RabbitMQ.Client。
第四步:
編寫具體代碼:
ConsumerClient端中Program.cs部分代碼為:
/// <summary> /// 主函數 /// </summary> /// <param name="args"></param> static void Main(string[] args) { IBus bus = RabbitHutch.CreateBus(string.Format("host={0}", "127.0.0.1:5672")); IAdvancedBus advancedBus = bus.Advanced; IExchange exChange= advancedBus.ExchangeDeclare("fanout_mq", "fanout"); IQueue queue = advancedBus.QueueDeclare(); advancedBus.Bind(exChange, queue, string.Empty); advancedBus.Consume(queue, registration => { registration.Add<string>((message, info) => { Console.WriteLine("接收到消息【{0}】", message.Body); }); }); Console.ReadLine(); }
ProducerClient端中Program.cs部分代碼為:
/// <summary> /// 主函數 /// </summary> /// <param name="args"></param> static void Main(string[] args) { try { IBus bus = RabbitHutch.CreateBus(string.Format("host={0}", "127.0.0.1:5672")); IAdvancedBus advancedBus = bus.Advanced; IExchange exChange = advancedBus.ExchangeDeclare("fanout_mq", "fanout"); new Action(() => { for (int i = 0; i < 1000; i++) { Thread.Sleep(1000); string message = "$$$$$$一號比較長的消息類型$$$$$$" + i; advancedBus.Publish(exChange, string.Empty, false, new Message<string>(message)); Console.WriteLine("已發送消息【{0}】", message); } }).BeginInvoke(null, null); IExchange exChange2 = advancedBus.ExchangeDeclare("fanout_mq", "fanout"); new Action(() => { for (int i = 0; i < 2000; i++) { Thread.Sleep(500); string message = "######二號短消息類型" + i; advancedBus.Publish(exChange2, string.Empty, false, new Message<string>(message)); Console.WriteLine("已發送消息【{0}】", message); } }).BeginInvoke(null, null); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); }
第五步:
執行程序,先執行ConsumerClient,再執行ProducerClient,測試一下,兩個進程就通過這個消息隊列達到通信的目的了,大功告成!
RabbitMQ初探--用C#實現通訊服務