RabbitMQ安装(winows版RabbitMQ)
安装借鉴这篇前半部分:http://blog.youkuaiyun.com/xingxing513234072/article/details/51014695
使用及理论借鉴这个地址后半部分 http://www.cnblogs.com/yangecnu/p/4227535.html
安装什么的我不多说,注意:
一:以管理员权限(右击以管理员权限运行)安装Erlang,否则RabbitMQ安装好启动的时候报错,
二:以管理员权限启动CMD,执行启动RabbitMQ命令
安装完我们得知道要怎么操作RabbitMQ、怎么部署?网上理论、demo一大推,没有人指导的话,你都不知道究竟怎么用代码控制消息生产、消费。说的通俗点:怎么把消息给MQ,MQ怎么处理这些信息。
怎么部署生产者:即怎么把消息传递给MQ、让Ta把消息放进队列。网上的demo代码是在控制台Main函数里,这就给了我误区。真相是,无需部署,只需要把生产者写成方法集成到自己的系统中,根据业务需要将消息放进队列。
怎么部署消费者:至少需要运行一个控制台程序来读取MQ队列。
C#操作RabbitMQ,需要一个RabbitMQd程序集,很方便的从Nuget中获取安装。
代码如下:
//queueName 队列名称
public void SendMsg(string queueName)
{
var conFact = new ConnectionFactory();
conFact.HostName = "122.114.53.6";
conFact.UserName = "jz-mq";
conFact.Password = "jz-mq";
conFact.Port = 5672;//默认端口
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
bool durable = true;//设置队列是否持久化
//声明一个队列 排他性,与自动删除(如果名称相同不会重复创建)
channel.QueueDeclare(queueName, durable, false, false, null);
var properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
string message = GetMessage(args);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", queueName, properties, body);
Console.WriteLine("发送了信息{0}", message);
}
}
}
public static void Main(string[] args)
{
var queueName = "logs";
var factory = GetFactory();
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
bool durable = true;//设置队列是否持久化
//声明一个队列 设置排他性,与自动删除(如果名称相同不会重复创建)
channel.QueueDeclare(queueName, durable, false, false, null);
channel.BasicQos(0, 1, false);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(queueName, true, consumer);
Console.WriteLine("消费者已启动,等待队列Logs任务..");
consumer.Received += (send, e) =>
{
string msg = Encoding.UTF8.GetString(e.Body);
Console.WriteLine("获取到信息{0}", msg);
};
//告诉RabbitMQ已经收到并处理了某条消息
channel.BasicConsume(queueName, true, consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
}