一、搭建環境
Rabbit MQ 是建立在強大的Erlang OTP平臺上,因此安裝RabbitMQ之前要先安裝Erlang。
erlang:http://www.erlang.org/download.html
rabbitmq:http://www.rabbitmq.com/download.html
我目前使用的:http://pan.baidu.com/s/1eS8Dhse
默認安裝的Rabbit MQ 監聽端口是:5672
?
二、配置
1. 安裝完以后erlang需要手動設置ERLANG_HOME 的系統變量。
輸入:set?ERLANG_HOME=C:\Program Files\erl9.0
2,打開cmd定位到rabbitmq的安裝路徑:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin
上述命令回車后接著輸入rabbitmqctl status,回車后出現下面一坨的即說明安裝沒有問題:
出現問題: Error:unable to connect to node rabbit@Hunter:nodedown
也不知道怎么回事,重新安裝了下rabbitmq-server-3.6.10
3,rabbitmq-plugins enable rabbitmq_management(安裝 RabbitMQWeb的管理插件。此時,已經可以通過?http://127.0.0.1:15672/ 地址來訪問web管理界面了,默認的賬戶和密碼均是 guest。但實際使用時可能需要重新一個新的管理賬戶) ?
4,rabbitmqctl.bat add_user zhangdi 123456(創建管理用戶,這一步還不能登錄)
5,rabbitmqctl.bat set_user_tags zhangdi?administrator(設置管理員,可以登錄了)
6,rabbitmqctl.bat set_permissions -p / ?zhangdi?".*" ".*" ".*"(授予管理員權限)
7,其他命令
a. 查詢用戶: rabbitmqctl.bat list_users
b. 查詢vhosts: rabbitmqctl.bat list_vhosts
c. 啟動RabbitMQ服務: net stop RabbitMQ && net start RabbitMQ
8,centos配置
https://ken.io/note/centos7-rabbitmq-install-setup#H3-7


#添加用戶 sudo rabbitmqctl add_user admin pwd#設置用戶角色 sudo rabbitmqctl set_user_tags admin administrator#tag(administrator,monitoring,policymaker,management)#設置用戶權限(接受來自所有Host的所有操作) sudo rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*' #查看用戶權限 sudo rabbitmqctl list_user_permissions admin
?
?
?
新版配置:
下載地址:https://pan.baidu.com/s/18-rLh0e3mSY0xX4YfDqi3g
參考地址:https://blog.csdn.net/hzw19920329/article/details/53156015
1,下載安裝erlang
①添加系統變量:ERLANG_HOME=C:\Program Files\erl9.3(安裝路徑)
②添加系統變量path:C:\Program Files\erl9.3\bin
③測試安裝是否成功:打開cmd 輸入erl,如果出現erlang的版本信息就表示erlang語言環境安裝成功
2,下載安裝RabbitMQ
注意:安裝目錄不能存在空格,最好安裝到c盤(我安裝rabbitmq到D盤出錯)
①cmd進入C:\RabbitMQServer\rabbitmq_server-3.7.4\sbin目錄 輸入:rabbitmq-plugins enable rabbitmq_management安裝管理界面
②安裝完成進入http://localhost:15672,默認管理員和密碼都是guest
?
三、C#使用RabbitMQ(使用EasyNetQ)
?
1,MQ.Common


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using EasyNetQ;namespace MQ.Common {/// <summary>/// 消息服務器連接器/// </summary>public class BusBuilder{public static IBus CreateMessageBus(){// 消息服務器連接字符串// var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"];//string connString = "host=192.168.98.107:5672;virtualHost=OrderQueue;username=zhangdi;password=123456";string connString = "host=127.0.0.1:5672;virtualHost=text;username=zhangdi;password=123456";if(string.IsNullOrEmpty(connString))throw new Exception("messageserver connection string is missing or empty");return RabbitHutch.CreateBus(connString);}} }


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MQ.Common {public interface IProcessMessage{void ProcessMsg(Message msg);} }


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using EasyNetQ;namespace MQ.Common {public class Message{public string MessageID { get; set; }public string MessageTitle { get; set; }public string MessageBody { get; set; }public string MessageRouter { get; set; }} }


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using EasyNetQ;namespace MQ.Common {public class MQHelper{/// <summary>/// 發送消息/// </summary>/// <param name="msg"></param>public static void Publish(Message msg){// 創建消息busIBus bus = BusBuilder.CreateMessageBus();try{bus.Publish(msg, x => x.WithTopic(msg.MessageRouter));}catch (EasyNetQException ex){//處理連接消息服務器異常 }bus.Dispose();//與數據庫connection類似,使用后記得銷毀bus對象 }public static void Subscibe(Message msg, IProcessMessage ipro){// 創建消息busIBus bus = BusBuilder.CreateMessageBus();try{bus.Subscribe<Message>(msg.MessageRouter, message => ipro.ProcessMsg(message),x => x.WithTopic(msg.MessageRouter));}catch (EasyNetQException ex){//處理連接消息服務器異常 }}} }
2,MQ.Consumer


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MQ.Common;namespace MQ.Consumer {public class OrderProcessMessage : IProcessMessage{public void ProcessMsg(Message msg){Console.WriteLine(msg.MessageBody);}} }


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MQ.Common;namespace MQ.Consumer {class Program{static void Main(string[] args){OrderProcessMessage order = new OrderProcessMessage();Message msg = new Message();msg.MessageID = "1";msg.MessageRouter = "pcm.notice.zhangsan";MQHelper.Subscibe(msg, order);Console.ReadLine();}} }
3,MQ.Producer


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MQ.Common;namespace MQ.Producer {class Program{static void Main(string[] args){Message msg = new Message();msg.MessageID = "1";msg.MessageBody = DateTime.Now.ToString();msg.MessageTitle = "1";msg.MessageRouter = "pcm.notice.zhangsan";MQHelper.Publish(msg);Console.ReadLine();}} }
當啟動Consumer(消費者)時,會自動在RabbitMQ服務器上創建相關的exchange和queue。
注意:這個程序應該先啟動Consumer(消費者)
案例下載:?http://pan.baidu.com/s/1c1LY9gc
?
?
?
參考文檔:
http://blog.csdn.net/seven_coder/article/details/50946562
http://www.cnblogs.com/zhangweizhong/p/5687457.html
?