『IT实战联盟』RabbitMQ知识点,一篇搞定


来源:性能与架构前言
分布式系统中 , 如何在各个应用之间高效的进行通信 , 是系统设计中的一个关键 。
使用 消息代理(message broker) 是一个优雅的解决方案 。
RabbitMQ 就是一个被广泛应用的消息代理 , 遵循 AMQP协议 。
接下来我们就了解一下:
Message Broker 概念
AMQP 协议的核心构成
消息转发的 4 种模式1. Message Broker
broker 是经纪人的意思 , 促成卖方、买方的交易 , 例如房产经纪人 。
消息模型中 , 有消息的生产者、消费者 , 就相当于卖方、买方 。
所以 , 也需要一个消息经纪人 , 这就引出了 message broker 的概念 。
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
message broker 从生产者接收消息 , 再发送给消费者 , 这样 , 生产者、消费者可以完全隔离 。
RabbitMQ 就是一个 message broker 。 2. AMQP
具体如何传递消息?要看使用的消息协议 。
RabbitMQ 支持多种协议 , 其中最重要的是 AMQP(Advanced Message Queuing Protocol) 。
AMQP 的概念模型很简单 , 包含3个部分:
Queue
Binding
Exchange
当一个消息发布到 RabbitMQ 后 , 首先到达 Exchange , 然后 Exchange 把消息分配给 Queue , 消费者从 Queue 中得到消息 。
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
AMQP 是一个可编程的协议 , 我们可以自由配置 exchange, binding, queue 。 2.1 Queue 队列
【『IT实战联盟』RabbitMQ知识点,一篇搞定】Queue 是先进先出数据结构 。
Queue 是 RabbitMQ 存储消息的地方 。
Queue 可以灵活的配置 , 例如:
设置 name
配置可靠模式 , 即使 broker 宕机也可以保障数据安全
消息自动删除
独占模式
……2.3 Consumer 消费者
一个 queue 可以同时连接多个 consumer 。
consumer 既可以自己从 queue 拉取消息 , 也可以由 queue 主动把消息推给 consumer 。 2.4 Binding 绑定
Binding 是 Queue 与 Exchange 建立连接的规则 。
每个 Queue 都会与一个默认 Exchange 连接 , 我们可以为这个 Queue 连接更多的 Exchange 。
Exchange 通过 Binding 规则 , 把消息路由到相应的 Queue 。 2.5 Exchange
Exchange 是 RabbitMQ 的消息网关 。
Exchange 就像是一个接线员 , 收到消息后决定如何转发 。
主要有 4 种转发类型:
Direct
Fanout
Topic
Header
下面具体了解一下 。 3. 消息转发模式3.1 Direct 直传Routing key == Binding key
routing key 是消息的一个属性 。
binding key 是绑定 queue 与 exchange 时指定的 。
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
生产者(绿色球)发送了一个消息 , 带着一个 routing key -- img.resize 。
当消息到达 exchange(桔色球)后 , exchange 会查找所有带着 img.resize 这个 Binding key 的 queue 。
找到匹配的 queue 之后 , 消息就会被发送给这些 queue 。
如果没找到 , 消息会被退回给生产者 , 或者丢弃 。
消息到达指定的 queue 之后 , 会以轮询的形式分派给消费者(resizer.1/resizer.2) , 确保负载均衡 。 3.2 Fanout 扇形
『IT实战联盟』RabbitMQ知识点,一篇搞定
本文插图
此方式会忽略 routing key , 把消息分派给所有连接的 queue 。