似乎工作模式,扇出和过滤的主题都可以通过主题交换来实现。为什么我会使用直接或扇出交换呢?
我们希望编写在我们的组织中找到的常见模式,这些模式抽象了amqp的无限灵活性(命名约定,默认为持久,发送公共标题,到期等)。我们应该利用不同的交换类型或实现所有主题模式;为什么呢?
(我们在Java中通过spring boot,golang和php开发了消费者/发布者)
答案 0 :(得分:3)
什么都不说你不应该。如果它适合你,请玩得开心!为什么我不应该为所有事情使用rabbitmq主题交换?
关于交换类型的真相是没有“主”类型 - 不是一个用作默认类型,或者大部分时间都没有。当然,给定的应用程序可能需要由单个交换或交换类型提供服务,但情况并非总是如此。即使在单个系统中,也可能需要以不同的方式路由消息并使它们最终位于同一队列中。
如果您发现自己处于以下情况:选择上述交换类型之一将排除邮件所需的一组路由行为,请使用多个交换。您可以从任意数量的交换路由到单个队列,或从单个交换路由到任意数量的队列。
不要将系统路由需求限制为任何给定消息或目标的单一交换类型。根据需要利用每一个。
关于不同的交换类型(再次,来自我的电子书)
直接:
直接交换允许您将队列绑定到具有匹配的路由密钥的交换,区分大小写。这可能是最直接的交换,因为没有模式匹配或其他行为来跟踪和考虑。如果消息中的路由密钥与交换中绑定的路由密钥匹配,则路由消息。
扇出:
扇出交换允许您向绑定到交换机的每个队列广播消息,而无法过滤哪些队列接收消息。如果队列绑定到扇出交换,它将接收通过该交换发布的任何消息。
和主题交流:
主题交换类似于直接交换,因为它使用路由键。但是,与直接交换不同,路由密钥不必与要路由的消息完全匹配。主题交换允许您在绑定中指定“主题”(路由键)的通配符匹配。这使您可以从多个路由密钥接收消息,并提供其他交换类型中没有的灵活性。