1.整体图示
由上图可以知道交换机的类型有:扇形、直连、主题和头交换机。
扇形交换机:广播
直连交换机:精确匹配
主题交换机:模糊匹配
2.主题交换机和头交换机的区别
主题交换机的路由是基于路由键,只有是字符串,匹配是设置*和#
头交换机的路由值基于消息的header数据,可以是整型和哈希值,匹配值是x-match
消息header数据里有一个特殊值”x-match”,它有两个值:
all: 默认值。一个传送消息的header里的键值对和交换机的header键值对全部匹配,才可以路由到对应交换机
any: 一个传送消息的header里的键值对和交换机的header键值对任意一个匹配,就可以路由到对应交换机
3.头交换机实例
//生产者发送时,增加了头部的属性
Map<String,Object> headers = new HashMap();
headers.put("format","pdf");
headers.put("type","report");
AMQP.BasicProperties props = new AMQP.BasicProperties
.Builder()
.headers(headers)
.build();
String msg = "交换机消息发布了";
channel.basicPublish(EXCHANGE_NAME, "", props, msg.getBytes());
//接受者在绑定交换机的时候,也增加了头部的属性
Map<String, Object> headers = new HashMap();
headers.put("format", "pdf");
headers.put("type", "report");
headers.put("x-match", "all");
channel.queueBind(queueName, EXCHANGE_NAME, "", myHeaders);