RabbitMQ --- Hello Mr.Tua


目錄

RabbitMQ --- Work Queues(工作隊列)

RabbitMQ --- Publish/Subscribe(發布/訂閱)

RabbitMQ --- Routing(路由)

安裝環境

1.下載安裝 Erlang 運行時環境

2.下載安裝 RabbitMQ Server 應用程序

3.啟動 RabbitMQ 服務(默認啟動)

4.安裝管理平台插件並打開遠程訪問權限

  4.1.打開 RabbitMQ Comman Prompt

  4.2.執行 rabbitmq-plugins enable rabbitmq_management

  4.3.訪問 http://localhost:15672 查看 RabbitMQ Server 相關信息(默認賬密為guest

  4.4.新增遠程訪問用戶

  4.5.點擊 Set permission 授權給新用戶

  4.6.停止 RabbitMQ 服務

  4.7.修改 ...\rabbitmq_server-3.6.10\etc\rabbitmq.config.example 文件(新增第18行代碼)

  4.8.啟動 RabbitMQ 服務

  4.9.訪問 http://IP:15672 測試是否成功

基本概念

 單個消息生產者 VS 單個消息消費者

在 .NET 中使用 RabbitMQ 需要下載它的客戶端程序集來獲取並引用 RabbitMQ 相關的組件。

using RabbitMQ.Client;
using System;
using System.Text;

//消息生產者控制台
namespace Producer
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建連接工廠對象
            var factory = new ConnectionFactory
            {
                HostName = "10.202.228.107",//目標主機IP或名稱
                UserName = "Tua",//RabbitMQ服務的用戶名稱
                Password = "Tua",//RabbitMQ服務的密碼
                Port = 5672//RabbitMQ服務的默認端口號是5672,可以不用顯示指定端口
            };
            //創建連接對象
            using (var connection = factory.CreateConnection())
            {
                //創建消息信道對象
                using (var channel = connection.CreateModel())
                {
                    //創建消息隊列,只有在該消息隊列不存在時才會創建
                    channel.QueueDeclare
                    (
                        queue: "Tua",//消息隊列名稱
                        durable: false,//是否開啟持久,true:即不會因為RabbitMQ服務崩潰重啟而丟失消息隊列
                        exclusive: false,//是否開啟反外,true:即只允許在當前連接中被訪問,當連接斷開時會自動清除該消息隊列
                        autoDelete: false,//是否開啟自動刪除,true:即當無任何消息消費者時,也就是說最后一個連接斷開時會自動清除該消息隊列
                        arguments: null//用於消息隊列的其它屬性(構造參數)
                    );
                    string msg = "Mr.Tua";
                    var body = Encoding.UTF8.GetBytes(msg);//將字符串消息轉換成二進制數組
                    //發送消息,將消息發布到消息隊列中
                    channel.BasicPublish
                    (
                        exchange: string.Empty,//消息交換機名稱
                        routingKey: "Tua",//路由鍵名稱,指定發送到"Tua"隊列
                        basicProperties: null,//消息的其它屬性
                        body: body//消息內容
                    );
                    Console.WriteLine("Producer sent message: {0}", msg);
                    Console.ReadLine();
                }
            }
        }
    }
}
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;

//消息消費者控制台
namespace Consumer
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory
            {
                //目標主機為本地
                HostName = "localhost"
            };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    //創建消息隊列,用於確保不受發送端和接收端先后啟動順序影響
                    channel.QueueDeclare
                    (
                        queue: "Tua",
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null
                    );
                    //創建消息消費者對象
                    var consumer = new EventingBasicConsumer(channel);
                    //異步接收消息時的回調
                    consumer.Received += (sender, e) =>
                    {
                        var body = e.Body;
                        var msg = Encoding.UTF8.GetString(body);
                        Console.WriteLine("Consumer received message: {0}", msg);
                    };
                    //啟動消息消費者
                    //消息消費者處理完消息任務時需要回應消息生產者,使其刪除該消息
                    //如果消息消費者沒有回應,那么消息生產者會將該消息重新發送給其它消息消費者
                    channel.BasicConsume
                    (
                        queue: "Tua",
                        noAck: true,//是否自動回應,false:即需要手動進行消息回應
                        consumer: consumer
                    );
                    Console.ReadLine();
                }
            }
        }
    }
}

 運行結果

啟動消息生產者控制台:

啟動消息消費者控制台:

在 RabbitMQ Comman Prompt 中執行 rabbitmqctl list_queues 查看消息隊列:

Producer 在 RabbitMQ Server 中創建了一個名為 Tua 的消息隊列並含有一條 Mr.Tua 的消息,Consumer 接收到了該消息, 而 Producer 得到了回應就會立即刪除該消息。


免責聲明!

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



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