且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-11-14 09:47:40

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

Why shouldn't I use rabbitmq topic exchanges for everything?

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

nothing says you shouldn't. if it works for you, have fun with it!

来自我的RabbitMQ:布局电子书:

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

The truth about exchange types is that there is no "master" type - not one to be used as a default, or most of the time. Sure, a given application may have its needs served by a single exchange or exchange type, but this will not always be the case. Even with in a single system, there may be a need to route messages in different ways and have them end up in the same queue.

如果您发现自己选择上述一种交换类型将无法为邮件设置一组所需的路由行为,请使用多个交换.您可以将路由从任意数量的交换路由到单个队列,也可以将路由从单个交换路由到任意数量的队列.

If you find yourself in a situation where choosing one of the above exchange types will preclude a needed set of routing behaviors for your messages, use more than one exchange. You can route from any number of exchanges to a single queue, or from a single exchange to any number of queues.

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

Don’t limit your systems routing needs to a single exchange type for any given message or destination. Take advantage of each one, as needed.

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

On the different exchange types (again, from my ebook)

直接:

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

A direct exchange allows you to bind a queue to an exchange with a routing key that is matched, case sensitively. This may be the most straight-forward exchange of them all, as there is no pattern matching or other behavior to track and consider. If a routing key from a message matches the routing key of a binding in the exchange, the message is routed.

Fanout:

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

Fanout exchanges allow you to broadcast a message to every queue bound to an exchange, with no way to filter which queues receive the message. If a queue is bound to a fanout exchange, it will receive any message published through that exchange.

和主题交流:

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

A topic exchange is similar to a direct exchange in that it uses routing keys. Unlike a direct exchange, though, the routing keys do not have to match exactly for a message to be routed. Topic exchanges allow you to specify wild-card matching of "topics" (routing keys) in your bindings. This lets you receive messages from more than one routing key and provides a level of flexibility not found in the other exchange types.