You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ C#:consumer.Received中Console.WriteLine无输出问题求助

RabbitMQ消费端Received事件中Console.WriteLine无输出问题解决

核心问题分析

你的代码存在两个关键问题导致Received事件回调无法触发(或输出不显示):

  1. 事件绑定顺序错误:你先调用BasicConsume启动消费,再绑定Received事件。此时RabbitMQ客户端已开始监听队列,但事件处理逻辑尚未注册,消息到达时无法触发回调。
  2. 临时队列的消息丢失风险:你使用随机名称的临时队列(channel.QueueDeclare()默认创建非持久化、排他、自动删除的队列),若生产者先于消费者运行,消息会因队列尚未绑定到交换机而被丢弃,消费者自然接收不到消息。

修复步骤

1. 调整事件绑定顺序

将Received事件的绑定代码移至BasicConsume之前,确保启动消费前事件处理逻辑已注册:

// Consumer
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = new Uri("amqps://guest:guest@localhost");

using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
    channel.ExchangeDeclare("kuyruk", type: ExchangeType.Fanout);

    // 为消费者创建随机名称的队列
    string queueName = channel.QueueDeclare().QueueName;
    channel.QueueBind(queue: queueName, exchange: "kuyruk", routingKey: "");

    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

    EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
    // 先绑定Received事件处理逻辑
    consumer.Received += (sender, e) =>
    {
        Thread.Sleep(500);
        Console.WriteLine(Encoding.UTF8.GetString(e.Body.ToArray()) + " received");
        channel.BasicAck(e.DeliveryTag, false);
    };
    // 再启动消费
    channel.BasicConsume(queueName, false, consumer);

    Console.WriteLine("消费者已启动,等待消息...");
    Console.Read();     
}

2. 确保消费端先启动

由于使用临时队列,必须先启动消费者(创建队列并绑定交换机),再运行生产者发送消息,否则生产者发送的消息会因无匹配队列被交换机丢弃。

3. 可选:验证连接状态

添加启动提示(如上述代码中的Console.WriteLine("消费者已启动,等待消息...")),确认程序正常进入等待状态,排除连接失败导致的无响应问题。

额外建议

如果需要持久化保存消息(即使消费者未启动,后续启动也能接收消息),可创建持久化队列:

// 创建持久化队列
string queueName = channel.QueueDeclare(queue: "my-persistent-queue", durable: true, exclusive: false, autoDelete: false, arguments: null).QueueName;

你已设置properties.Persistent = true确保消息持久化,这部分无需修改。

内容的提问来源于stack exchange,提问作者Duhan Uzun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:40:25