消费者“收到”事件未触发

时间:2018-09-04 06:13:29

标签: c# rabbitmq

我正在尝试建立对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方法没有触发。

我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

“正在使用”呼叫置于您的连接上,不会触发您的事件。只需从代码中删除“ using”块,以使它不会关闭连接。

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
        );