隨着公司加大力度信息化建設,PCB企業各類各樣的系統軟件愈來愈多,整個公司訂單流狀態監控變得愈來愈不可控,是時候需採用新的方式來收集各系統狀態節點狀態了,如下記錄RabbitMQ安裝使用:算法
RabbitMQ做爲一個消息代理,主要和消息打交道,負責接收並轉發消息。RabbitMQ提供了可靠的消息機制、跟蹤機制和靈活的消息路由,支持消息集羣和分佈式部署。適用於排隊算法、秒殺活動、消息分發、異步處理、數據同步、處理耗時任務、CQRS等應用場景異步
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服務:
1.RabbitMQ網址:
默認帳號和密碼:guest guest
2.主界面
3.增長用戶
4.配置用戶權限
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(); } } }
使用消列隊列的好處就是它可以並行的處理隊列。當一個消息接受端處理不過來時,咱們只須要增長多個消息接收處理者。下圖展現兩個消息接收端,等待消息接收,再啓動一個消息發送端進行消息發送。
從下圖中可知,循環發送6條信息依次的分派給2個客戶端,每一個客戶端平均接收到3條消息
默認狀況下:RabbitMQ這種分發消息的方式叫作循環(round-robin)。