RabbitMQ 消费者总是直接关闭(C#)

cpr*_*ler 4 c# rabbitmq

目前我正在学习如何使用 RabbitMQ。发送作品。但是接收不起作用。这是我的代码:

    var factory = new ConnectionFactory() { HostName = hostName };
        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 += (model, ea) =>
            {
                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine("Recieved: {0}", message);
            };
            consumer.Shutdown += (o, e) =>
            {
                Console.WriteLine("Error with RabbitMQ: {0}", e.Cause);
                createConnection(hostName, queueName);
            };
            channel.BasicConsume(queueName, true, consumer);
        }
Run Code Online (Sandbox Code Playgroud)

这是从教程中复制的。如果我启动应用程序,则直接调用 consumer.Shutdown 并得到:

    {AMQP close-reason, initiated by Application, code=200, text="Goodbye", classId=0, methodId=0, cause=}
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

Evk*_*Evk 5

channel.BasicConsume是非阻塞调用,这意味着它将立即返回。在您的示例中接下来发生的是您的通道和连接被处理(由于using声明),因此您会看到立即关闭。在您从中复制此代码的示例中,Console.ReadLinechannel.BasicConsume. 这可以防止通道和连接配置直到用户在控制台中按下键。