1. 程式人生 > >RabbitMQ 安裝及配置

RabbitMQ 安裝及配置

RabbitMQ

這裡寫圖片描述

RabbitMQ簡介

AMQP,即Advanced Message Queuing Protocol,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。

AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性、安全。
RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支援多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支援AJAX。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗。

RabbitMQ提供了可靠的訊息機制、跟蹤機制和靈活的訊息路由,支援訊息叢集和分散式部署。適用於排隊演算法、秒殺活動、訊息分發、非同步處理、資料同步、處理耗時任務、CQRS等應用場景。
本Markdown編輯器使用[StackEdit][6]修改而來,用它寫部落格,將會帶來全新的體驗哦:

RabbitMQ安裝

安裝完成後配置環境變數
這裡寫圖片描述

安裝完成檢查
這裡寫圖片描述

安裝完成後設定登入賬戶完成後重啟服務

這裡寫圖片描述

3、RabbitMQ常用命令

開啟瀏覽器訪問http://localhost:15672

預設userName:guest    password:guest

建立使用者

rabbitmqctl.bat add_user leimiaotang 123456

授權角色

(1) 超級管理員(administrator)
可登陸管理控制檯(啟用management plugin的情況下),可檢視所有的資訊,並且可以對使用者,策略(policy)進行操作。
(2) 監控者(monitoring)
可登陸管理控制檯(啟用management plugin的情況下),同時可以檢視rabbitmq節點的相關資訊(程序數,記憶體使用情況,磁碟使用情況等)
(3) 策略制定者(policymaker)
可登陸管理控制檯(啟用management plugin的情況下), 同時可以對policy進行管理。
(4) 普通管理者(management)
僅可登陸管理控制檯(啟用management plugin的情況下),無法看到節點資訊,也無法對策略進行管理。
(5) 其他的

進入到sbin目錄下執行命令

rabbitmq-server stop

rabbitmq-server start

生產者

class Program
{
static void Main(string[] args)
{
DirectExchangeSendMsg();
}

    /// <summary>
    /// 連線配置
    /// </summary>
    private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
    {
        HostName = "192.168.1.28",
        UserName = "admin",
        Password = "admin"
    };
    /// <summary>
    /// 路由名稱
    /// </summary>
    const string ExchangeName = "justin.exchange";

    //佇列名稱
    const string QueueName = "justin.queue";
    public static void DirectExchangeSendMsg()
    {
        using (IConnection conn = rabbitMqFactory.CreateConnection())
        {
            using (IModel channel = conn.CreateModel())
            {
                channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
                channel.QueueDeclare(QueueName, durable: true, autoDelete: false, exclusive: false, arguments: null);
                channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);

                var props = channel.CreateBasicProperties();
                props.Persistent = true;
                string vadata = Console.ReadLine();
                while (vadata != "exit")
                {
                    var msgBody = Encoding.UTF8.GetBytes(vadata);
                    channel.BasicPublish(exchange: ExchangeName, routingKey: QueueName, basicProperties: props, body: msgBody);
                    Console.WriteLine(string.Format("***傳送時間:{0},傳送完成,輸入exit退出訊息傳送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    vadata = Console.ReadLine();
                }
            }
        }
    }
}

消費者

static void Main(string[] args)
{
DirectAcceptExchangeEvent();
}

    /// <summary>
    /// 連線配置
    /// </summary>
    private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
    {
        HostName = "192.168.1.28",
        UserName = "admin",
        Password = "admin"
    };
    /// <summary>
    /// 路由名稱
    /// </summary>
    const string ExchangeName = "justin.exchange";

    //佇列名稱
    const string QueueName = "justin.queue";
    public static void DirectAcceptExchangeEvent()
    {
        using (IConnection conn = rabbitMqFactory.CreateConnection())
        {
            using (IModel channel = conn.CreateModel())
            {
                channel.QueueDeclare(QueueName, durable: true, autoDelete: false, exclusive: false, arguments: null);
                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {

                    var msgBody = Encoding.UTF8.GetString(ea.Body);
                    Console.WriteLine(string.Format("***接收時間:{0},訊息內容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));

                    //CreateDB,EntCode  CreateDB,1234567890ABCDEF
                    string[] oper=msgBody.Split(',');

                    if (oper[0].Equals("CreateDB"))
                    {
                        CreateDB createDB = new CreateDB();
                        createDB.CreateEntDB(oper[1], @"C:/Project/src/Code/CSTFinance/Ent.sql");
                    }
                };
                channel.BasicConsume(QueueName,  true, consumer: consumer);

                Console.WriteLine("按任意值,退出程式");
                Console.ReadKey();
            }
        }
    }
}