.NET 使用 RabbitMQ 圖文簡介


 前言

最近項目要使用RabbitMQ,園里里面已經有很多優秀的文章,Rabbitmq官網也有.net實例。這里我嘗試下圖文並茂之形式記錄下使用的過程。

安裝

RabbitMQ是建立在erlang OTP平台下,因此在windows下需要下載並安裝以下兩個組件:

1. Erlang OTP For windows

2. Rabbit MQ Windows Service Install

RabbitMQ安裝完成之后一般需要設置一個賬號,通過命令 add_user , set_permissions 設置權限,set_user_tags 設置群組。

還需要安裝其基於http的管理平台插件,這個平台插件便於我們查看和管理RabbitMQ,可以通過命令行將其啟用。

rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user july July!
rabbitmqctl set_permissions july ".*" ".*" ".*"
rabbitmqctl set_user_tags july administrator

之后就可以通過 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 定義一個exchange
    channel.ExchangeDeclare(exchangeName, "direct", durable: true, autoDelete: false, arguments: null);

    //4 定義兩個queue
    channel.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";
string otherQueueName = "test2.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的使用就有了大概的了解。


免責聲明!

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



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