我们有一个将使用 RabbitMQ 的应用程序,并且有几个不同的队列用于在层之间传递消息。
最初,我计划使用多个直接交换,每种消息类型一个,但看起来使用不同路由键绑定的队列的单个主题交换将实现相同的效果。
拥有一个单一的交换似乎也更容易维护,但我想知道以一种方式进行比另一种方式是否有任何好处(如果有的话)?
选项 1,使用多个直接交换:
ExchangeA (type: direct)
-QueueA
ExchangeB (type: direct)
-QueueB
ExchangeC (type: direct)
-QueueC
选项 2,使用单主题交换:
Exchange (type: topic)
-QueueA (receives messages from exchange with routing key of "TypeA")
-QueueB (receives messages from exchange with routing key of "TypeB")
-QueueC (receives messages from exchange with routing key of "TypeC")
假设这两种模型都被认为是使用一个运行的代理来实现的,那么我可以看到几乎没有什么区别。
选项 2 在现实世界中似乎更常见,用于解决此类路由问题(至少在我的轶事经验中),而这正是主题交换所要解决的挑战。
您可能遇到的唯一区别与路由速度有关。我不确定 RabbitMQ 中的 Exchange 路由(始终基于精确的字符串匹配)是否比主题交换中使用的路由密钥技术(可以包括通配符,如#
and *
)。我的预感是 Exchange 歧视会更快,但您可以自己尝试一下来找出答案,或者尝试联系 RabbitMQ 团队询问他们。
最后,如果您选择选项 1,最终会出现大量队列,那么您的 Exchange 将会成比例激增。这听起来像是一个令人头痛的维护问题。如果您只有少数队列,那么这不会是太大的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)