RabbitMQ有多少种Exchange?
面试回答模板
“RabbitMQ 在 AMQP 协议中预定义了 四种常用交换机 + 两种特殊类型,共 6 种:
- Direct:routing-key 全等匹配;
- Fanout :广播,忽略 key;
- Topic:按
*.#
通配符匹配; - Headers :按消息头键值对匹配(性能低,很少用);
- System :系统内部保留(如
amq.rabbitmq.trace
); - 自定义:通过插件扩展实现。
Java 开发层面 只需关注前 4 种,创建方式相同:
channel.exchangeDeclare("x", BuiltinExchangeType.DIRECT|FANOUT|TOPIC|HEADERS);
”
追问场景示例
面试官:为什么实际项目里很少用 Headers?
答:Headers Exchange 在匹配时遍历所有键值对,CPU 开销大,且可读性差,Topic 几乎能覆盖其需求,所以线上基本不用。