根据我对Rabbitmq和AMQP的阅读,大多数交换,队列和绑定都是由应用程序完成的,例如
App1(Producer) declares exchange1
App2(Consumer) declares queue1 and binds to exchange1
然后我看到为了不丢失消息,这两个消息都应声明其他配置,所以现在应该是:
App1(Producer) declares exchange1, declares queue1 and binds to exchange1
App2(Consumer) declares exchange1, declares queue1 and binds to exchange1
现在,生产者应用程序需要知道它从来不需要知道的细节。 这可以接受吗?感觉不对
答案 0 :(得分:0)
为使消费者能够将交换绑定到他要从中消费消息的队列,该交换必须存在并且具有预期的类型(扇出,直接,主题)和配置。
考虑一种情况,即消费者将依赖于其他人创建的交换。如果他只是创建队列,然后尝试将其绑定到丢失的交换机,则将收到错误消息。
在必须经过特定配置的事物(交换,队列,绑定)的情况下,消费者才能执行其部分设置,您可以使用以下三种选择:
如果配置步骤在所有方面都相同,则第三个选项将起作用。例如,如果此配置始终相同,则RabbitMQ接受重复创建交换。如果以不同的配置再次配置了现有的交换机,则会引发错误。
我想说,对于应用程序代码进行设置的情况,建议使用第三个选项。对我来说感觉不错。