我有一个Java消费者应用程序连接到名为“my_exhange_foo”的RabbitMQ(3.2.4)不可删除的扇出交换:
Connection connection = connectionFactory.newConnection(consumerPool);
Channel channel = connection.createChannel();
channel.exchangeDeclare("my_exhange_foo", "fanout"); // is this necessary?
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, "my_exhange_foo", "");
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);
无论是否声明交换,客户端消费者应用程序都会收到消息。
我在本教程中遵循了示例ReceiveLogsDirect.java https://www.rabbitmq.com/tutorials/tutorial-four-java.html
并阅读api,但无法弄清楚在消费者方面宣布交换的目的是什么。如果有人能对此有所了解,我将不胜感激。
答案 0 :(得分:2)
在消费者方面宣布交换的目的是什么?
它允许在生成器进程启动之前启动使用者进程。没有它,如果首先启动消费者,那么它就会出错。在使用生产系统时,具有首先启动消费者的灵活性非常有用,它可以减少因重启系统的固有时间而导致的问题。