RabbitMQ 在 .NET 6 中的应用实现
确保 RabbitMQ 已正确安装并运行。
接收端(消费者)示例
try
{
Console.WriteLine($"---------【Receiver】开始运行...---------");
var factory = new ConnectionFactory
{
HostName = ConfigurationHelper.GetValue("RabbitMQ:HostName"),
Port = int.Parse(ConfigurationHelper.GetValue("RabbitMQ:Port")),
UserName = ConfigurationHelper.GetValue("RabbitMQ:UserName"),
Password = ConfigurationHelper.GetValue("RabbitMQ:Password")
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
string queueName = "NotificationQueue";
channel.QueueDeclare(
queue: queueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null
);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (sender, args) =>
{
var messageBytes = args.Body.ToArray();
string receivedMessage = Encoding.UTF8.GetString(messageBytes);
Console.WriteLine($"接收到消息: {receivedMessage}");
};
channel.BasicConsume(queueName, true, consumer);
Console.WriteLine($"---------【Receiver】启动成功---------");
Console.ReadKey();
Console.WriteLine("---------【Receiver】已关闭---------");
}
catch (Exception ex)
{
Console.WriteLine($"---------【Receiver】异常信息:{ex}");
}
发送端(生产者)示例
Console.WriteLine("---------【Sender】准备就绪---------");
var factory = new ConnectionFactory
{
HostName = ConfigurationHelper.GetValue("RabbitMQ:HostName"),
Port = int.Parse(ConfigurationHelper.GetValue("RabbitMQ:Port")),
UserName = ConfigurationHelper.GetValue("RabbitMQ:UserName"),
Password = ConfigurationHelper.GetValue("RabbitMQ:Password")
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
string queueName = "NotificationQueue";
channel.QueueDeclare(
queue: queueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null
);
string userInput;
do
{
Console.Write("请输入要发送的消息(输入 exit 结束):");
userInput = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(userInput) && userInput.ToLower() != "exit")
{
byte[] messageBody = Encoding.UTF8.GetBytes(userInput);
channel.BasicPublish("", queueName, null, messageBody);
Console.WriteLine("消息发送完成!\n");
}
} while (userInput?.Trim().ToLower() != "exit");
Console.WriteLine("---------【Sender】已退出---------");
当前演示的是基础的消息队列通信方式。RabbitMQ 支持多种交换机和路由模式,可根据实际业务场景进行扩展应用。
注意事项:
- 必须启用队列及消息的持久化配置以保障数据可靠性。
- 读取消息体应使用
ea.Body.ToArray()方法代替旧版写法。
参考资料: