簡介
繼上一篇 CentOS上安裝RabbitMQ講述RabbitMQ具體安裝后,這一篇講述RabbitMQ在C#的使用,這里將從基本用法到高級特性的使用講述。
前序條件
這里需要增加一個用戶,并且設置用戶為administrator,更多命令可以參考[RabbitMQ更多命令],這里開始我本來是想用guest用戶,端口是:15672,但是在創建連接的時候是連接不上的,查資料后發現是必須開放5672端口,并且不能使用guest默認用戶(http://www.rabbitmq.com/rabbitmqctl.8.html)
rabbitmqctl add_user allen pwd //增加用戶
rabbitmqctl set_user_tags allen administrator //設置用戶權限
rabbitmqctl change_password allen newpass //修改密碼
開啟5672端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
基本用法
連接之前可以看到,rabbitmq的UI界面是沒有連接的
send發布者的代碼
/// <summary>
/// 發送消息
/// </summary>
public class Send
{
private static readonly string appID = ConfigurationManager.AppSettings["AppID"];
static void Main(string[] args)
{
var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
string queue = string.Format("MQ{0}.BaseStudy", appID);
channel.QueueDeclare(queue, false, false, false, null); //定義一個隊列
while (true)
{
Console.Write("請輸入要發送的消息:");
var message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", queue, null, body); //發送消息
Console.WriteLine("已發送的消息: {0}", message);
}
}
}
}
}
RabbitMQUri,和AppID
<add key="AppID" value="150107"/> <!--隊列ID-->
<add key="RabbitMQUri" value="amqp://test_user:123456@111.231.204.119:5672/" /> <!--連接字符串-->
RabbitMQUri的Value相當于:
<add key="RabbitMQ_HostName" value="111.231.204.119"/>
<add key="RabbitMQ_UserName" value="test_user"/>
<add key="RabbitMQ_Password" value="123456"/>
<add key="RabbitMQ_Port" value="5672"/>
<add key="RabbitMQ_VirtualHost" value="/"/>
未建立連接時:
建立連接后:
發送消息
可以看到RabbitMQ的UI管理界面的消息有:
receive消費者收到的消息:
receive的代碼:
/// <summary>
/// 接收消息
/// </summary>
public class Receive
{
private static readonly string appID = ConfigurationManager.AppSettings["AppID"];
static void Main(string[] args)
{
var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
string queue = string.Format("MQ{0}.BaseStudy", appID);
channel.QueueDeclare(queue, false, false, false, null); //定義一個隊列
Console.WriteLine("準備接收消息:");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (s, e) =>
{
var body = e.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("接收到的消息: {0}", message);
};
channel.BasicConsume(queue, true, consumer); //開啟消費者與通道、隊列關聯
Console.ReadLine();
}
}
}
最后,附上源碼地址,包括RabbitMQ的基本用法,發布訂閱,高級特性DEMO