首页 > 解决方案 > 消费者“收到”事件未触发

问题描述

我正在尝试设置对 RabbitMQ 队列的订阅并将其传递给自定义事件处理程序。所以我有一个名为的类RabbitMQClient,其中包含以下方法:

public void Subscribe(string queueName, EventHandler<BasicDeliverEventArgs> receivedHandler)
{
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(
                queue: queueName,
                durable: false,
                exclusive: false,
                autoDelete: false,
                arguments: null
            );

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += receivedHandler;

            channel.BasicConsume(
                queue: queueName,
                autoAck: false,
                consumer: consumer
            );
        }
    }
}

我正在使用依赖注入,所以我有一个RabbitMQClient(单例)接口。

在我的消费类中,我有这个方法,我想作为EventHandler

public void Consumer_Received(object sender, BasicDeliverEventArgs e)
{
    var message = e.Body.FromByteArray<ProgressQueueMessage>();
}

我正在尝试像这样订阅队列:

rabbitMQClient.Subscribe(Consts.RabbitMQ.ProgressQueue, Consumer_Received);

我可以看到队列开始获取消息,但该Consumer_Received方法没有触发。

我在这里想念什么?

标签: c#rabbitmq

解决方案


“使用”调用处理您的连接,您的事件不会被触发。只需从代码中删除您的“使用”块,这样它就不会关闭连接。

var connection = factory.CreateConnection();

var channel = connection.CreateModel();

channel.QueueDeclare(
    queue: queueName,
    durable: false,
    exclusive: false,
    autoDelete: false,
    arguments: null);

var consumer = new EventingBasicConsumer(channel);

consumer.Received += receivedHandler;

channel.BasicConsume(
    queue: queueName,
    autoAck: false,
    consumer: consumer);

推荐阅读