一尘不染

为什么我不应该对所有内容使用Rabbitmq主题交换?

spring-boot

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

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

(我们通过Spring Boot,golang和php在Java中使用了消费者/发布者)


阅读 233

收藏
2020-05-30

共1个答案

一尘不染

为什么我不应该对所有内容使用Rabbitmq主题交换?

没有什么说不应该的。如果它适合您,请尝试一下!

我的RabbitMQ:布局电子书

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

如果您发现自己选择上述一种交换类型将无法为您的消息选择一组必需的路由行为,请使用多个交换。您可以从任意数量的交换路由到单个队列,或者从单个交换路由到任意数量的队列。

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

关于不同的交易所类型(同样,来自我的电子书)

直接:

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

扇出:

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

和主题交流:

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

2020-05-30