目前我正在学习如何使用 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)
谁能帮我?
channel.BasicConsume是非阻塞调用,这意味着它将立即返回。在您的示例中接下来发生的是您的通道和连接被处理(由于using声明),因此您会看到立即关闭。在您从中复制此代码的示例中,Console.ReadLine在channel.BasicConsume. 这可以防止通道和连接配置直到用户在控制台中按下键。