c#在webApi中写rabbitMQ队列的消费者,进入consumer.Received回调后里面有很多队列
时间: 2024-02-12 21:07:11 浏览: 140
消费者在进入 `consumer.Received` 回调后,会接收到一个消息对象。这个消息对象中包含了很多信息,比如消息的内容、消息的路由键、消息的标签等等。如果你的 RabbitMQ 中有多个队列,那么你可以根据消息的路由键或者标签来判断这个消息属于哪个队列,然后进行相应的处理。
下面是一个简单的示例代码,演示了如何在 WebApi 中写 RabbitMQ 队列的消费者:
```csharp
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
public class RabbitMQConsumer
{
private readonly IConnection _connection;
private readonly IModel _channel;
public RabbitMQConsumer()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
_connection = factory.CreateConnection();
_channel = _connection.CreateModel();
// 声明队列
_channel.QueueDeclare(queue: "test_queue",
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);
// 根据路由键或标签判断消息属于哪个队列
if(ea.RoutingKey == "queue1")
{
// 处理 queue1 队列的消息
}
else if(ea.RoutingKey == "queue2")
{
// 处理 queue2 队列的消息
}
else
{
// 处理其他队列的消息
}
};
// 开始消费消息
_channel.BasicConsume(queue: "test_queue",
autoAck: true,
consumer: consumer);
}
public void Close()
{
_channel.Close();
_connection.Close();
}
}
```
在上面的代码中,我们通过 `consumer.Received` 事件来处理消息。在事件处理函数中,我们根据消息的路由键或标签来判断消息属于哪个队列,然后进行相应的处理。在最后,我们通过 `_channel.BasicConsume` 方法开始消费消息。注意,这里的 `autoAck` 参数设置为 `true`,表示在消费完成后自动确认消息。如果你需要手动确认消息,需要将 `autoAck` 设置为 `false`。
阅读全文