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

时间:2014-07-31 13:44:48

标签: rabbitmq amqp

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

2 个答案:

答案 0 :(得分:3)

我会说这是简化的问题。 如果,您需要的只是一个拓扑,其中每个特定的路由键以1:1的方式映射队列(同一应用程序中多个工作人员之间的任务循环分配是 RabbitMQ doc),然后直接交换可能更容易使用和使用,以及您所需要的一切。这并不是说你无法使用主题交换(你可以)完成同样的事情。

同样,使用扇出交换,如果您的情况需要简单地广播消息,您可能会发现扇出交换更容易使用。同样,这并不是说你无法使用主题交换(你可以)完成同样的事情。

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

由于 RabbitMQ doc说明主题交换

  

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

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

答案 1 :(得分:1)

您可以使用主题交换替换direct和fanout的功能,但您也可以实现一个大型的" Animal"上课,不要打扰实施“猫”#34;和#34;狗"的...

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

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