在RabbitMQ中创建自己的交换有什么好处吗?
E.g。使用“amq.direct”与type = direct的“my_direct_exchange”。
答案 0 :(得分:6)
是的,它们可让您自由地提供代表性名称,设置额外选项并在需要时隔离消息流。
默认amq.*
每种类型的可用交换机+1直接无名称作为发布使用的默认值,由每个vhost中的代理预先声明,AMQP Specification 1.6. Class exchange。
如果您没有特殊需求(请参阅下面的说明)并且每个项目都有单独的vhost(或者您知道自己在做什么),预定义和用户之间没有区别定义一个,至少在RabbitMQ实现中。
amq.*
交换的好处是它们始终是预先定义的,因此您通常不需要在发布之前先创建它们。
注意,如果他们拥有足够的权限,您的应用仍然可以删除预先定义的交易。
此外,amq.*
实体的目标是内部使用,尤其是队列(您甚至无法声明以amq.
开头的实体),因此使用amq.*
个不同于预定义的交换(来自用户应用程序的amq.rabbitmq.{trace,log}
)可能根本不是一个好主意。
amq.*
次交换时的特殊情况某些插件使用amq.*
次交换,inc。默认的。例如,STOMP plugin使用amq.topic
,RabbitMQ本身使用amq.rabbitmq.log
进行日志记录,Firehose Traces使用amq.rabbitmq.trace
。可能有另一个使用默认交换的插件,inc。所有权。与它们使用相同的交换可能会导致意外的结果,如消息流交集。
另外,请记住,默认情况下预定义的交换是持久的,并且具有可能与您真正需要的不同的默认属性和标志。
此外,请记住,RabbitMQ定义amq.match
与amq.headers
同时使用headers
类型,因此为了实现经纪人之间的兼容性,您无法依赖在amq.match
交换中,从摇篮中定义。
当你为AMQP客户端编写一些测试时,你也可以使用预先声明的交换(你可能别无选择)。
正如你所看到的,如果你的需要通过以上所有,那么是的,你可以使用它们,但我可以建议这不是最好的做法。