rabbit mq c#
第一步连接工厂类:
首先创建一个连接工厂:RabbitMQ-Common类库用于创建连接
public static IConnection GetConnection() {
var factory = new ConnectionFactory
{
HostName = "127.0.0.1",//服务器地址
Port = 5672,//端口号
UserName = "gerry",
Password = "gerry",
VirtualHost = "/"//队列地址(虚拟主机名)
};
return factory.CreateConnection();
}
发送消息(生产消息)
public static void SendMessage() {
string queueName = "normal";
using (var connection = RabbitMQHelper.GetConnection()) { //获取连接
using (var channel = connection.CreateModel())//创建信道
{
channel.QueueDeclare(queueName, false, false, false, null);//此处没有绑定交换机,会使用默认的交换机
while (true) {
string message = "这里是要传递的消息";
var body = Encoding.UTF8.GetBytes(message);//将消息转换成字符进行发送
////exchange:要将消息发送到的Exchange(交换器)
///routingKey: 路由Key
///mandatory: 如果为true, 消息不能路由到指定的队列时,会触发channel.BasicReturn事件,如果为false,则broker会直接将消息丢弃。
///(channel.BasicReturn += Channel_BasicReturn;)
///basicProperties: 其它的一些属性 body:消息内
channel.BasicPublish("",queueName ,true,null,body);
Thread.Sleep(1000);//等待消息发送
Console.WriteLine("发送成功");
}
}
}
}
消费消息(消费者)
//消费者
public static void ReceiveMessage()
{
string queueName = "normal";
using (var connection = RabbitMQHelper.GetConnection())
{ //获取连接
using (var channel = connection.CreateModel())//创建信道
{
channel.QueueDeclare(queueName, false, false, false, null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body.ToArray());
Console.WriteLine(" [x] Received {0}", message);
};//回调
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
}
}
}