- 安装RabbitMQ.Client NuGet包:
在Visual Studio的项目中,通过NuGet包管理器搜索并安装
RabbitMQ.Client
包,这是C#与RabbitMQ交互的基础库。
- 建立连接:
using RabbitMQ.Client;
// 建立连接工厂
var factory = new ConnectionFactory()
{
HostName = "localhost", // RabbitMQ服务器地址
UserName = "guest", // 用户名
Password = "guest" // 密码
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
// 后续操作在这个channel中进行
}
- 队列声明:
using RabbitMQ.Client;
var factory = new ConnectionFactory()
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
// 声明队列
channel.QueueDeclare(
queue: "myQueue", // 队列名称
durable: false, // 是否持久化,false表示服务器重启队列消失
exclusive: false, // 是否排他,false表示可被其他消费者访问
autoDelete: false, // 是否自动删除,false表示队列使用完不自动删除
arguments: null); // 其他参数
}
- 消息发送:
using RabbitMQ.Client;
var factory = new ConnectionFactory()
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(
queue: "myQueue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello, RabbitMQ!";
var body = System.Text.Encoding.UTF8.GetBytes(message);
channel.BasicPublish(
exchange: "", // 使用默认交换机
routingKey: "myQueue", // 队列名称
basicProperties: null,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
- 消息接收:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
var factory = new ConnectionFactory()
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(
queue: "myQueue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(
queue: "myQueue",
autoAck: true, // 自动确认消息已接收,设置为false可手动确认
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}