我正在浏览RabbitMQ教程(this one),遇到了一个问题。
如果我按照教程中的方式编写代码-它工作得很好。但是我想把逻辑移到单独的类中,这样看起来更好,而且可以重用。
public class Consumer
{
private ConnectionFactory factory;
private List<string> receivedData;
public Consumer()
{
receivedData = new List<string>();
factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
receivedData.Add(message);
};
channel.BasicConsume("hello", true, consumer);
}
}
public List<string> GetAllReceivedMessages()
{
return receivedData;
}
}
主程序
var consumer = new Consumer();
while (true)
{
Console.Clear();
var messages = consumer.GetAllReceivedMessages();
foreach (var msg in messages)
{
Console.WriteLine(msg);
}
Thread.Sleep(5000);
}
我看不出与原作有什么不同。但所有的时间receivedData列表是空的。为什么?为什么?
先谢了。
1条答案
按热度按时间ldioqlga1#
当
using
语句退出时,通道和连接将关闭。