PCB RabbitMQ的安裝使用

    隨着公司加大力度信息化建設,PCB企業各類各樣的系統軟件愈來愈多,整個公司訂單流狀態監控變得愈來愈不可控,是時候需採用新的方式來收集各系統狀態節點狀態了,如下記錄RabbitMQ安裝使用:算法

一.RabbitMQ簡介

      RabbitMQ做爲一個消息代理,主要和消息打交道,負責接收並轉發消息。RabbitMQ提供了可靠的消息機制、跟蹤機制和靈活的消息路由,支持消息集羣和分佈式部署。適用於排隊算法、秒殺活動、消息分發、異步處理、數據同步、處理耗時任務、CQRS等應用場景異步

二.RabbitMQ環境搭建

     1.安裝Erlang運行環境分佈式

        Rabbit MQ 是創建在強大的Erlang OTP平臺上,所以安裝Rabbit MQ的前提是安裝Erlangspa

         下載並安裝 Erlang OTP For Windows (vR16B03)插件

      2.安裝RabbitMQ代理

          下載並安裝 Rabbit MQ Server Windows Installer (v3.2.3)code

       3.安裝管理平臺插件orm

rabbitmq-plugins enable rabbitmq_management

       4.重啓RabbitMQ服務server

net stop RabbitMQ && net start RabbitMQ

       5.安裝RabbitMQ界面   blog

        安裝插件與重啓服務

        

         MQ啓動

          

           MQ服務:

           

 

三.RabbitMQ界面

    1.RabbitMQ網址: 

        http://localhost:15672

       默認帳號和密碼:guest   guest

     2.主界面

       

         3.增長用戶

          

           4.配置用戶權限

            

 

四.C# 發送消息與接受消息

      1.發送消息

        /// <summary>
        /// 鏈接配置
        /// </summary>
        private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
        {
            HostName = "127.0.1.1",
            UserName = "pcbren",
            Password = "abc+2015",
            Port = 5672
        };
        /// <summary>
        /// 路由名稱
        /// </summary>
        const string ExchangeName = "pcbren.exchange";
        /// <summary>
        ///隊列名稱
        /// </summary>
        const string QueueName = "pcbren.queue";
        static void Main(string[] args)
        {
            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},發送完成", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                        vadata = Console.ReadLine();
                    }
                }
            }
        }

      2.接收消息

        /// <summary>
        /// 鏈接配置
        /// </summary>
        private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
        {
            HostName = "127.0.1.1",
            UserName = "pcbren",
            Password = "abc+2015",
            Port = 5672
        };
        /// <summary>
        /// 路由名稱
        /// </summary>
        const string ExchangeName = "pcbren.exchange";
        /// <summary>
        ///隊列名稱
        /// </summary>
        const string QueueName = "pcbren.queue";
        static void Main(string[] args)
        {
            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, MQ) =>
                    {
                        var msgBody = Encoding.UTF8.GetString(MQ.Body);
                        Console.WriteLine(string.Format("接收時間:{0},消息內容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
                        channel.BasicAck(deliveryTag: MQ.DeliveryTag, multiple: false); //消息確認後,MQ服務端纔將此消息清除
                    };
                    channel.BasicConsume(QueueName, false, consumer: consumer);
                    Console.ReadKey();
                }
            }
        }
五.RabbitMQ消息循環調度

        使用消列隊列的好處就是它可以並行的處理隊列。當一個消息接受端處理不過來時,咱們只須要增長多個消息接收處理者。下圖展現兩個消息接收端,等待消息接收,再啓動一個消息發送端進行消息發送。

        從下圖中可知,循環發送6條信息依次的分派給2個客戶端,每一個客戶端平均接收到3條消息
        默認狀況下:RabbitMQ這種分發消息的方式叫作循環(round-robin)。  

      

六.RabbitMQ消息持久化
相關文章
相關標籤/搜索