在RabbitMQ消费者上声明交换的目的

时间:2015-04-30 23:17:28

标签: java rabbitmq rabbitmq-exchange

我有一个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,但无法弄清楚在消费者方面宣布交换的目的是什么。如果有人能对此有所了解,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

在消费者方面宣布交换的目的是什么?

它允许在生成器进程启动之前启动使用者进程。没有它,如果首先启动消费者,那么它就会出错。在使用生产系统时,具有首先启动消费者的灵活性非常有用,它可以减少因重启系统的固有时间而导致的问题。