MQ优势

  1. 应用解耦
  2. 异步提速
  3. 削峰填谷(负载均衡)

使用MQ的条件:

  1. 生产者不需要消费者的反馈
  2. 容忍短暂的不一致
  3. 增加复杂度和成本

image.png
一个Connection就是一个TCP连接, 利用channel减少TCP连接, 提高利用率

结构

Broker: 表示RabbitMQ服务, 每个Broker里面至少有一个Virtual Host虚拟主机
Connection: 一个TCP连接
Channel: 虚拟连接, 多路复用信道
Exchange: 根据不同的分发规则将消息分发到不同的Queue
Queue: 存放消息的
Routing Key: 路由键, Exchange解析Producer指定的Routing Key, 根据Exchange和Queue绑定规则, 将消息发送到合适的Queue中

工作模式

Direct

direct的Exchange会将消息转发到指定的Routing Key的queue上, Routing Key解析规则为精准匹配
image.png

Fanout

广播类型, 此类型的Exchange不处理Routing Key, 而是将消息发送到与Exchange绑定的所有Queue上
image.png

Topic

主题模式, Topic类型的Exchange会根据通配符对Routing Key进行匹配, 满足的Routing Key才会被路由到对应的Queue上
通配符的匹配规则:

Routing key必须是一串字符串,每个单词用“.”分隔; 符号“#”表示匹配一个或多个单词; 符号“*”表示匹配一个单词。

Headers

不通过Routing Key绑定, 而是通过Arguments绑定
image.png

producer在发送消息时可以添加headers属性,Exchange接收到消息后,会解析headers属性,只要我们上面配置的Arguments中的所有属性全部被包含在Headers中并且值相等,那么这条消息就会被路由到对应的Queue中。