首页 文章

直接和扇出交换需要什么?

提问于
浏览
1

根据我的理解,可以使用主题交换来实现直接和扇出交换的所有功能或用例 . 主题交换支持功能的超集 . 所以问题是,为什么RabbitMQ有直接和扇出交换?有没有使用直接/扇出交换但不能与主题交换实现的用例?

2 回答

  • 1

    我会说这是 simplification 的问题 . 如果您需要的只是一个拓扑,其中每个特定的路由键以1:1的方式映射队列(同一应用程序中多个工作者之间的任务循环分布是RabbitMQ文档中引用的示例),那么直接交换可能是更易于使用和使用,以及您所需要的一切 . 那个's not to say you couldn'使用Topic Exchanges(你可以)完成同样的事情 .

    同样,通过Fanout交换,如果您的情况需要简单地广播消息,您可能会发现Fanout交换更容易使用 . 再一次,使用Topic Exchanges(你可以)完成同样的事情 .

    我通常只使用Topic交换,因为我重视它们提供的灵活性 . 随着应用程序的扩展,它们可以在同一个交换中处理更多种用例,而其他两种类型则可能不是这种情况 . 因此,我可以避免在应用程序增长时不得不在中途更改拓扑 .

    正如RabbitMQ文档所述有关Topic交换:

    主题交换具有非常广泛的用例 . 每当问题涉及多个消费者/应用程序选择性地选择他们想要接收哪种类型的消息时,应考虑使用主题交换 .

    有关这些概念的更多信息,包括插图,此页面有相当多的信息:https://www.rabbitmq.com/tutorials/amqp-concepts.html

  • 3

    你可以用主题交换替换direct和fanout的功能,但是你也可以实现一个大的“Animal”类,而不用去实现“cat”和“dog”类......

    不同的交换类型根据您的需求提供特异性 . 您可以使用主题交换进行广播,但是您需要强制每个客户端了解 # 的含义并要求他们在绑定时使用该路由键;或者只是使用扇出交换 .

    在实现方面,实现主题交换有点复杂,需要一个数据结构,要求比普通的扇出或直接交换更多的簿记 .

相关问题