amqp (advanced message queuing protocol 高级消息队列协议) 核心概念:
server /broker 消息服务器: 接收 / 存储消息, 维护交换机 / 队列等元信息数据
connection 连接: 客户端连接消息服务器
channel 网络信道: 一个 connection 可以有多个 channel
virutual host 虚拟主机: 逻辑隔离, 相当于 tomcat 的 webapps 下各个项目
exchange 交换机: 消息会首先发送到指定交换机, 交换机再根据交换机类型和路由键路由到指定队列
routing key 路由键: 交换机根据路由键路由到指定队列, 路由键可以是固定的名字或者是主题交换机的 pattern, 即 #
表示 0 个或多个单词, *
固定表示 1 个单词
message 消息: 包含消息属性 (头信息 / 优先级等) 和消息体
queue 队列 (消息会路由保存到某个队列中)
监听者 (相同队列下可以有多个监听者消费, 一般一个消息只会分发到某个监听者身上)
交换机类型
Direct
直连交换机 (一对一, 只能发送到对应绑定的单个队列, 不够灵活)Topic
主题交换机 (支持一对多, 根据模式, 与路由键匹配的队列都会收到消息, 灵活, 推荐)Fanout
广播交换机 (所有与该交换机绑定的队列都会收到消息, 即忽略路由键)headers
头交换机 (使用头信息匹配, 不使用路由键. 交换机会声明一个 key 是 x-match, 值是 all (全部匹配) 或者 any (任一匹配) (匹配会忽略所有 x- 开头的头信息) 传过来消息的头信息会与绑定头交换机的队列的头信息比较)
附:
主题交换机的模式语法:
*
表示匹配 1 个单词, 例如 mall.*
可以匹配 mall.order
不能匹配 mall.order.cancel
#
表示匹配 0 个或多个单词, 例如 mall.#
可以匹配 mall.order.cancel