.NET 使用 RabbitMQ 图文简介
?前言
最近項目要使用RabbitMQ,園里里面已經有很多優秀的文章,Rabbitmq官網也有.net實例。這里我嘗試下圖文并茂之形式記錄下使用的過程。
安裝
RabbitMQ是建立在erlang OTP平臺下,因此在windows下需要下載并安裝以下兩個組件:
1.?Erlang OTP For windows
2.?Rabbit MQ Windows Service Install
RabbitMQ一般還需要安裝其基于http的管理平臺插件,這個平臺插件便于我們查看和管理RabbitMQ,可以通過命令行將其啟用:
| rabbitmq-plugins enable? rabbitmq_management |
之后就可以通過?http://localhost:15672/ 登錄,賬號的密碼和密碼可以使用默認的guest/guest,登錄之后的頁面:
RabbitMq 使用
下圖就是具體的使用流程
其方框中就是Rabbitmq的message broker,我們將上圖按上下方式來解釋:
1. 信息發送端將消息(message)發送到exchange
2. exchange接受消息之后,負責將其路由到具體的隊列中
3. Bindings負責連接exchange和隊列(queue)
4. 消息到達隊列(queue),然后等待被消息接收端處理
5. 消息接收端處理消息
初始化RabbitMQ
現在我們用代碼來demo流程,首先在nuget上獲取RabbitMQ.Client:
然后創建圖中2,3,4步需要的exchange,bingding,queue
string exchangeName = "test.exchange";string queueName = "test1.queue";
string otherQueueName = "test2.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())
using (IModel channel = conn.CreateModel()) { ? ?//2 定義一個exchangechannel.ExchangeDeclare(exchangeName, "direct", durable: true, autoDelete: false, arguments: null); ? ?//4 定義兩個queuechannel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);channel.QueueDeclare(otherQueueName, durable: true, exclusive: false, autoDelete: false, arguments: null); ? ?//3 定義exchange到queue的binding ? ?channel.QueueBind(queueName, exchangeName, routingKey: queueName);channel.QueueBind(otherQueueName, exchangeName, routingKey: otherQueueName); }
創建成功之后可以在rabbit的管理平臺查看:
發送消息
從圖上我們得知消息是發送到rabbitmq的exchange,但可以傳一些消息屬性如routingkey,一下代碼中我們將隊列的名字作為routingkey傳進去:
string exchangeName = "test.exchange";
string queueName = "test1.queue";
string otherQueueName = "test2.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())
using (IModel channel = conn.CreateModel)) { ?
? ?var props = channel.CreateBasicProperties();props.Persistent = true; ?
? ?var msgBody = Encoding.UTF8.GetBytes("Hello, World!"); ? ?
/ /1. 發送消息到exchange ,但加上routingkey ? ?channel.BasicPublish(exchangeName, routingKey: queueName, basicProperties: props, body: msgBody);channel.BasicPublish(exchangeName, routingKey: otherQueueName, basicProperties: props, body: msgBody); }
發送之后可以rabbitmq上看到:
?
接收消息
string queueName = "test1.queue";
using (IConnection conn = rabbitMqFactory.CreateConnection())
using (IModel channel = conn.CreateModel()) { ? ?//5. 從test1.queue 隊列獲取消息BasicGetResult msgResponse = channel.BasicGet(queueName, noAck: true); ?
?string msgBody = Encoding.UTF8.GetString(msgResponse.Body); ? ?
//5. 從test2.queue 隊列獲取消息msgResponse = channel.BasicGet(otherQueueName, noAck: true);msgBody = Encoding.UTF8.GetString(msgResponse.Body);}
?總結
通過以上的簡述我們對rabbitmq的使用就有了大概的了解
相關文章:?
.Net使用RabbitMQ詳解
體驗Rabbitmq強大的【優先級隊列】之輕松面對現實業務場景
RabbitMQ消息隊列應用
RabbitMQ 高可用集群搭建及電商平臺使用經驗總結
原文地址:http://www.cnblogs.com/julyluo/p/6262553.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的.NET 使用 RabbitMQ 图文简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 中的那些认证中
- 下一篇: 为了支持AOP的编程模式,我为.NET