C# 使用 RabbitMQ 实现简单消息收发教程

1 下载量 51 浏览量 更新于2024-08-04 收藏 90KB DOCX 举报
“此文档提供了关于ASP.NET编程中使用C#与RabbitMQ进行简单消息收发的示例代码。” 在ASP.NET开发中,有时我们需要在应用程序之间传递数据或实现异步处理,这时可以借助消息队列如RabbitMQ来实现。RabbitMQ是一个开源的消息代理和队列服务器,支持多种消息协议,包括AMQP(Advanced Message Queuing Protocol),它是本文档中C#代码所基于的协议。 在C#中,我们可以使用RabbitMQ的.NET客户端库来与RabbitMQ服务器交互。以下代码展示了如何使用这个库进行基本的消息发布(生产者)和消费(消费者)操作: 1. 发布消息(生产者): 在`PublishInfo`方法中,首先创建一个`ConnectionFactory`对象,设置RabbitMQ服务器的主机名、用户名和密码。接着,通过工厂创建一个连接和模型。然后,声明队列(在这里是"test"队列),并设置消息的持久性(`durable=true`)。最后,创建一个基础属性对象,并设置消息的投递模式为2(表示持久化),然后将消息内容编码为字节数组,调用`BasicPublish`方法发布到队列。 ```csharp private static void PublishInfo(string queue, string message) { // 创建连接工厂并设置RabbitMQ服务器信息 var factory = new ConnectionFactory { HostName = "localhost", UserName = "guest", Password = "guest" }; // 创建连接和通道 using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { // 声明队列并设置消息持久化 channel.QueueDeclare(queue, durable: true, exclusive: false, autoDelete: false, arguments: null); // 创建消息属性并设置投递模式 IBasicProperties properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; // 发布消息到队列 var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish("", queue, properties, body); } } ``` 使用时,只需调用`PublishInfo`方法传入队列名称和消息内容即可。 2. 消费消息(消费者): 对于消息的消费,文档提供了一个旧版的`ConsumeInfo`方法示例。消费者也需要建立连接和通道,然后通过`BasicConsume`方法监听队列中的消息。一旦有新的消息到达,回调函数会被调用。 ```csharp private static void ConsumeInfo(string queue) { // 创建连接工厂并设置RabbitMQ服务器信息 var factory = new ConnectionFactory { HostName = "localhost", UserName = "guest", Password = "guest" }; // 创建连接和通道 using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { // 声明队列 channel.QueueDeclare(queue, durable: true, exclusive: false, autoDelete: false, arguments: null); // 消费消息,这里使用旧版API 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, autoAck: true, consumer: consumer); } } ``` 在实际应用中,通常会使用更现代的API,例如`IBasicConsumer`接口和`BasicGet`方法,或者采用基于`async/await`的API来提高效率。然而,上述代码已经足够理解RabbitMQ的基本工作原理和C#客户端的使用方式。 为了在生产环境中使用这些代码,你需要确保已经在本地安装并运行了RabbitMQ服务器,并且允许"guest"用户访问。同时,根据实际需求,可能还需要处理异常、错误处理、连接恢复等复杂情况。此外,对于大规模的消息处理,可能需要考虑消息确认机制、消费者心跳、多线程处理等高级特性。