2

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

我们希望将我们组织中发现的常见模式编入一个库中,该库抽象了 amqp 的无限灵活性(命名约定、默认为持久、发送通用标头、到期等)。我们应该利用不同的交换类型还是使用主题实现所有模式?为什么?

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

4

1 回答 1

4

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

没有人说你不应该。如果它对你有用,那就玩得开心吧!

来自我的 RabbitMQ:布局电子书

交换类型的真相是没有“主”类型 - 没有一个可以用作默认值,或者大多数时候。当然,给定的应用程序可能会通过单个交换或交换类型来满足其需求,但情况并非总是如此。即使在单个系统中,也可能需要以不同的方式路由消息并将它们最终放在同一个队列中。

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

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

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

直接的:

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

扇出:

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

和话题交流:

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

于 2015-11-10T14:03:49.737 回答