RabbitMQ Pub / Sub - Subscriber无法接收消息

时间:2016-06-29 11:14:40

标签: c# rabbitmq

我正在使用示例代码使用“扇出”交换类型实现发布/订阅。但如下面的代码订阅者不显示已发布的“Hello Word”消息。

Publisher.cs

data <- read.table("mydata.txt")
plot(data[,1])

Subscriber.cs

 var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare(exchange: "logs", type: "fanout");

            var message = GetMessage(args);
            var body = Encoding.UTF8.GetBytes(message);
            channel.BasicPublish(exchange: "logs",
                                 routingKey: "",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

        Console.WriteLine(" Press [enter] to exit.");
        Console.ReadLine();
    }

    private static string GetMessage(string[] args)
    {
        return ((args.Length > 0)
               ? string.Join(" ", args)
               : "info: Hello World!");
    }

代码参考: https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html

1 个答案:

答案 0 :(得分:1)

当你发现它确实有效时,你只需要先启动用户。为什么?答案也在您提供的链接上。我在这里引用一部分:

  

但我们的记录器并非如此。我们想听听所有日志   消息,而不仅仅是它们的一个子集。我们也只对它感兴趣   当前流动的消息不在旧消息中。解决我们需要的问题   两件事。

     

首先,每当我们连接到Rabbit 时,我们都需要一个新的空队列。   为此,我们可以创建一个随机名称的队列,或者甚至更好    - 让服务器为我们选择随机队列名称。

     

其次,一旦我们断开消费者,队列应该是   自动删除。

这基本上意味着只有在启动订阅者时才会创建队列,并且只有在那时,交换机才有一个实际放入消息的队列。由于您首先启动发布者,因此消息没有队列最终进入。