为什么我不应该使用rabbitmq主题交换?

时间:2015-11-10 04:03:44

标签: spring-boot rabbitmq amqp rabbitmq-exchange

似乎工作模式,扇出和过滤的主题都可以通过主题交换来实现。为什么我会使用直接或扇出交换呢?

我们希望编写在我们的组织中找到的常见模式,这些模式抽象了amqp的无限灵活性(命名约定,默认为持久,发送公共标题,到期等)。我们应该利用不同的交换类型或实现所有主题模式;为什么呢?

(我们在Java中通过spring boot,golang和php开发了消费者/发布者)

1 个答案:

答案 0 :(得分:3)

  

为什么我不应该为所有事情使用rabbitmq主题交换?

什么都不说你不应该。如果它适合你,请玩得开心!

来自my RabbitMQ: Layout ebook

  

关于交换类型的真相是没有“主”类型 - 不是一个用作默认类型,或者大部分时间都没有。当然,给定的应用程序可能需要由单个交换或交换类型提供服务,但情况并非总是如此。即使在单个系统中,也可能需要以不同的方式路由消息并使它们最终位于同一队列中。

     

如果您发现自己处于以下情况:选择上述交换类型之一将排除邮件所需的一组路由行为,请使用多个交换。您可以从任意数量的交换路由到单个队列,或从单个交换路由到任意数量的队列。

     

不要将系统路由需求限制为任何给定消息或目标的单一交换类型。根据需要利用每一个。

关于不同的交换类型(再次,来自我的电子书)

直接:

  

直接交换允许您将队列绑定到具有匹配的路由密钥的交换,区分大小写。这可能是最直接的交换,因为没有模式匹配或其他行为来跟踪和考虑。如果消息中的路由密钥与交换中绑定的路由密钥匹配,则路由消息。

扇出:

  

扇出交换允许您向绑定到交换机的每个队列广播消息,而无法过滤哪些队列接收消息。如果队列绑定到扇出交换,它将接收通过该交换发布的任何消息。

和主题交流:

  

主题交换类似于直接交换,因为它使用路由键。但是,与直接交换不同,路由密钥不必与要路由的消息完全匹配。主题交换允许您在绑定中指定“主题”(路由键)的通配符匹配。这使您可以从多个路由密钥接收消息,并提供其他交换类型中没有的灵活性。