提取RabbitMQ功能以分离类

p8h8hvxi  于 8个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(105)

我正在浏览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列表是空的。为什么?为什么?
先谢了。

ldioqlga

ldioqlga1#

using语句退出时,通道和连接将关闭。

相关问题