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