Я изучаю RabbitMq с .NET. Согласно tutorial, простейшая реализация потребителя выглядит следующим образом:C# RabbitMq: метод рефакторинга нарушает функциональность?
public class Receive
{
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
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(" [x] Received {0}", message);
};
channel.BasicConsume(queue: "hello",
noAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
}
И это работает правильно. Тем не менее, я хотел реорганизовать его: пусть определить функциональность приемника в отдельном методе. Он выглядит следующим образом:
public class Recieve
{
private ConnectionFactory factory;
public void ConsumeSimpleMessage(string queueName = "default")
{
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(message);
};
channel.BasicConsume(queue: queueName,
noAck: true,
consumer: consumer);
}
}
}
public Recieve(string hostName = "localhost")
{
factory = new ConnectionFactory() { HostName = hostName };
}
}
И когда я пытаюсь вызвать этот метод Main():
class Program
{
static void Main(string[] args)
{
Recieve reciever = new Recieve();
reciever.ConsumeSimpleMessage();
Console.ReadLine();
}
}
здесь не работает. Он ничего не показывает. Однако сообщения будут удалены, что означает, что они были получены. Почему это происходит? Есть ли что-нибудь, что я не знал о передаче событий?
Можете ли вы проверить свою очередь с ошибкой/ошибкой и посмотреть, есть ли там что-нибудь. – MindingData
Должно ли ваше имя очереди быть приветствием? – Joe