当前位置: 首页 > news >正文

【分布式技术】深入理解AMQP(高级消息队列协议)

AMQP相关内容简单介绍

    • 一、什么是 AMQP 协议?
      • ✅ AMQP 全称:
      • ✅ AMQP 是什么?
      • ✅ AMQP 的核心目标:
    • 二、AMQP 的核心概念(重点!)
      • 1. **Producer(生产者)**
      • 2. **Consumer(消费者)**
      • 3. **Exchange(交换机)**
      • 4. **Queue(队列)**
      • 5. **Binding(绑定)**
      • 6. **Routing Key(路由键)**
      • 7. **Virtual Host(虚拟主机)**
      • 8. **Message(消息)**
      • 9. 示意图
    • 三、AMQP 的消息流转流程(简化图示)
    • 四、实现了 AMQP 协议的主流消息中间件(Broker)
      • 1. 🥇 **RabbitMQ(最主流、社区最活跃)**
      • 2. 🥈 **Apache Qpid(支持 AMQP 0-10 / 1.0)**
      • 3. 🥉 **Apache ActiveMQ / Artemis(支持 AMQP 1.0)**
        • ▶ **ActiveMQ(经典,较老旧)**
        • ▶ **ActiveMQ Artemis(推荐)**
      • 4. **Azure Service Bus(微软云服务,支持 AMQP 1.0)**
      • 5. **其他支持 AMQP 的 Broker(部分支持或通过插件)**
    • 五、AMQP 协议的典型使用场景
    • 六、总结表格
    • ✅ 如果你准备使用 AMQP,推荐如下:

一、什么是 AMQP 协议?

✅ AMQP 全称:

AMQP(Advanced Message Queuing Protocol) —— 即 高级消息队列协议

✅ AMQP 是什么?

AMQP 是一种 开放标准的、二进制的、应用层网络通信协议,专门为 应用程序之间的异步消息通信 而设计。

它定义了一套 标准的消息传递模型和语义,用来实现:

  • 消息的 可靠投递
  • 消息的 路由与分发
  • 消息的 存储与消费
  • 消息的 确认与事务

✅ AMQP 的核心目标:

目标说明
🔄 异步通信生产者与消费者不需要同时在线
🧩 系统解耦发送方和接收方彼此独立,通过中间件交互
🌍 跨平台/跨语言支持不同操作系统和编程语言系统互相通信
🛡️ 可靠性支持消息持久化、确认机制、事务等,确保消息不丢
📦 标准化是国际标准协议(由 OASIS 组织维护),不是某个厂商私有协议

二、AMQP 的核心概念(重点!)

AMQP 的模型比简单的“队列”更复杂、更灵活,其核心组件包括:

1. Producer(生产者)

  • 消息的 发送方,负责创建消息并发送到 Exchange(交换机)
  • 例如:用户注册服务,在用户注册成功后发送一条消息。

2. Consumer(消费者)

  • 消息的 接收方,从 Queue(队列) 获取消息并进行处理。
  • 例如:邮件服务监听一个队列,收到消息后给用户发送欢迎邮件。

3. Exchange(交换机)

  • 消息的 路由中心,接收来自 Producer 的消息,并根据规则(Binding + Routing Key)将消息路由到一个或多个 Queue。
  • Exchange 不存储消息,它只是根据规则转发。

🔹 常见 Exchange 类型:

类型说明适用场景
Direct精确匹配 Routing Key,一对一或一对多精准投递点对点精准消息投递
Topic基于通配符匹配 Routing Key,灵活路由按主题分类的消息,如日志级别、事件类型
Fanout广播模式,忽略 Routing Key,所有绑定队列都会收到消息群发、广播通知
Headers根据消息的 Header 属性进行匹配(较少使用)按元数据条件路由

4. Queue(队列)

  • 消息的 缓冲区 / 存储单元,用于存放待消费的消息。
  • 一个 Queue 可以被多个 Consumer 订阅(如竞争消费模式)。
  • 支持设置:持久化、消息过期(TTL)、最大长度、优先级等。

5. Binding(绑定)

  • 是 Exchange 和 Queue 之间的 连接规则,定义了消息如何从 Exchange 路由到一个或多个 Queue。
  • 通常会指定一个 Routing Key,Exchange 根据它和 Binding 规则决定消息去向。

6. Routing Key(路由键)

  • 是消息的一个属性,Exchange 根据它和 Binding 规则决定将消息路由到哪个 Queue。
  • 类似于邮件的“收件人地址”或“主题标签”。

7. Virtual Host(虚拟主机)

  • 用于逻辑隔离,类似于命名空间。
  • 一个 Broker(消息服务器)可以有多个 Virtual Host,每个 VHost 拥有自己的 Exchanges、Queues 和权限,提升安全性与隔离性。

8. Message(消息)

  • 消息包含三部分:
    • Payload(消息体):实际要传输的数据(如 JSON、文本等)。
    • Properties(消息属性):如优先级、过期时间、消息类型等元信息。
    • Routing Key:用于 Exchange 路由消息。

9. 示意图

+------------------+       +------------------+       +------------------+
|   Producer       | ----> |   Exchange       | ----> |    Queue         |
| (消息发送方)     |       | (路由中心)       |       | (消息存储/缓冲)  |
+------------------+       +------------------+       +------------------+|                        |                        ||                        |                        |v                        v                        v
+------------------+       +------------------+       +------------------+
|   Message        |       |   Binding        |       |   Consumer       |
| (包含 Payload +  |       | (Exchange<->Queue|       | (消息接收方)     |
|   Properties +   |       |   的绑定规则)    |       |                  |
|   Routing Key)   |       +------------------+       +------------------+
+------------------+                 |v+------------------+|   Virtual Host   || (逻辑隔离单元)   |+------------------+

三、AMQP 的消息流转流程(简化图示)

1. Producer||---[发送消息]---> Exchange||---[根据 Binding + Routing Key]---> Queue||---[消费者拉取/接收]---> Consumer

更详细的步骤:

  1. Producer 创建一条消息,指定 Routing Key,将消息发送到某个 Exchange
  2. Exchange 根据 Binding 规则(和 Routing Key)决定将消息路由到哪个/哪些 Queue
  3. Queue 存储该消息,等待 Consumer 来消费。
  4. Consumer 从 Queue 中获取消息并处理,通常会返回 ACK 表示成功接收。
  5. (可选)如果 Consumer 未及时确认,Broker 可能会根据配置重新投递消息。
  • 示意图
+-------------+        +-------------+        +-------------+
|  Producer   | -----> |  Exchange   | -----> |   Queue     |
| (发送消息)   |        | (路由消息)  |        | (存储消息)  |
+-------------+        +-------------+        +-------------+|                     |                     ||                     |                     |v                     v                     v
+-------------+     +----------------+    +-------------+
|  Message    |     |   Binding      |    |  Consumer   |
| (含 Routing |     | (绑定规则)     |    | (接收消息)  |
|   Key 等)   |     +----------------+    +-------------+
+-------------+↑|
+------------------+
| Virtual Host     |  (逻辑隔离单元,如 /, /dev, /prod)
+------------------+

四、实现了 AMQP 协议的主流消息中间件(Broker)

下面是业界常见、且 完整支持 AMQP 协议(主要是 AMQP 0-9-1 或 AMQP 1.0) 的消息中间件:

1. 🥇 RabbitMQ(最主流、社区最活跃)

  • 支持协议: AMQP 0-9-1(原生)、AMQP 1.0(插件)、MQTT、STOMP 等
  • 特点:
    • 功能非常完善:支持 Exchange、Queue、Routing、ACK、持久化、事务、集群等
    • 支持多种 Exchange 类型(Direct / Topic / Fanout / Headers)
    • 高可用、易部署、文档丰富、插件生态强大
    • 适合大多数企业级应用
  • 使用场景:
    • 企业异步任务处理
    • 订单/支付等核心业务消息通信
    • 微服务间解耦通信
    • 实时事件通知系统
  • 官网: https://www.rabbitmq.com

推荐作为学习 AMQP 和一般企业级消息队列的首选

2. 🥈 Apache Qpid(支持 AMQP 0-10 / 1.0)

  • 支持协议: AMQP 0-10、AMQP 1.0
  • 特点:
    • 由 Apache 基金会维护,更加标准化
    • 提供 Java、C++ 等客户端
    • 更加贴近 AMQP 1.0 标准规范
  • 使用场景: 对 AMQP 1.0 标准兼容性要求高的系统,或与 JMS 互通的场景

🔗 官网:https://qpid.apache.org

3. 🥉 Apache ActiveMQ / Artemis(支持 AMQP 1.0)

ActiveMQ(经典,较老旧)
  • 支持 AMQP 1.0、STOMP、MQTT 等
  • 功能全面但架构偏传统,逐渐被 Artemis 替代
ActiveMQ Artemis(推荐)
  • 是 ActiveMQ 的下一代,由 Red Hat 主导
  • 支持 AMQP 1.0、STOMP、MQTT 等
  • 高性能、低延迟,支持现代微服务与云原生架构
  • 适合需要高吞吐、低延时、协议丰富的场景

🔗 官网:https://activemq.apache.org/components/artemis

4. Azure Service Bus(微软云服务,支持 AMQP 1.0)

  • 微软云平台提供的企业级消息服务
  • 支持 Queue、Topic(类似 Exchange)、AMQP 1.0
  • 适合 与 Azure 云生态深度集成 的业务系统

5. 其他支持 AMQP 的 Broker(部分支持或通过插件)

中间件是否支持 AMQP说明
Apache Kafka❌ 不支持 AMQP使用自有的二进制协议,虽然功能强大,但不属于 AMQP 生态
Redis❌ 不支持 AMQPRedis 的 Pub/Sub 是自有协议,非常轻量,但不提供 AMQP 的可靠性与路由能力
NATS❌ 不支持 AMQP轻量级消息系统,有自己的协议
ZeroMQ❌ 不是传统 Broker更像是网络通信库,不提供完整的 AMQP Broker 功能

五、AMQP 协议的典型使用场景

场景说明适合的 AMQP Broker
企业异步任务处理如邮件发送、短信通知、报表生成等RabbitMQ、Artemis
订单/支付/交易系统需要高可靠、不丢消息、顺序性保障RabbitMQ、ActiveMQ Artemis
微服务通信服务之间通过消息解耦,实现异步调用RabbitMQ、Artemis
事件驱动架构(EDA)系统间通过事件通知协作RabbitMQ、Qpid
日志收集 / 指标上报不同服务产生日志,通过消息队列收集RabbitMQ(结合 Logstash 等)
定时/延迟任务如订单超时未支付自动关闭RabbitMQ(延迟插件)、Artemis

六、总结表格

项目说明
协议名称AMQP(Advanced Message Queuing Protocol)
类型开放标准、二进制、应用层消息通信协议
核心概念Producer、Consumer、Exchange、Queue、Binding、Routing Key、Virtual Host
消息模型基于 Exchange 路由到 Queue,支持多种路由策略(Direct / Topic / Fanout)
特点可靠、灵活、标准化、跨平台、支持消息确认与持久化
代表实现(Broker)RabbitMQ(最主流)、ActiveMQ Artemis、Apache Qpid、Azure Service Bus
适用场景企业系统集成、异步任务、微服务通信、事件通知、订单系统等
对比 Pub/Sub(如 Redis)AMQP 更加严谨、功能丰富、支持可靠投递与复杂路由,但复杂度稍高

✅ 如果你准备使用 AMQP,推荐如下:

场景推荐实现
想快速上手、学习 AMQP、做企业级应用RabbitMQ(简单、强大、社区活跃)
需要高可靠、云原生、微服务支持ActiveMQ Artemis
与微软云深度集成Azure Service Bus
需要严格遵循 AMQP 1.0 标准Apache Qpid

文章转载自:

http://whOc0MSx.hmhdn.cn
http://ZrGyTZzP.hmhdn.cn
http://5Z88SRlT.hmhdn.cn
http://fppBjl5W.hmhdn.cn
http://MxDDXn9I.hmhdn.cn
http://ZkeE2WcU.hmhdn.cn
http://fny5Q7l2.hmhdn.cn
http://dYBBy8xz.hmhdn.cn
http://EtOcAklc.hmhdn.cn
http://VW0lKpEg.hmhdn.cn
http://YCsP7x32.hmhdn.cn
http://XSa9zgtZ.hmhdn.cn
http://FZ6Y6FTh.hmhdn.cn
http://j5JDYgJ2.hmhdn.cn
http://d2GKfAtS.hmhdn.cn
http://uNcD4Bvj.hmhdn.cn
http://DGIuvw3i.hmhdn.cn
http://gzg8Z0xb.hmhdn.cn
http://h4yk9CA7.hmhdn.cn
http://25GphXMM.hmhdn.cn
http://CJ7EdkLe.hmhdn.cn
http://76jA9IYJ.hmhdn.cn
http://QuAxTeeR.hmhdn.cn
http://LxQ52nH4.hmhdn.cn
http://dwPOsrgc.hmhdn.cn
http://YrGlfJ9n.hmhdn.cn
http://fye7a81e.hmhdn.cn
http://YTdlwfhT.hmhdn.cn
http://SZ1e5cmZ.hmhdn.cn
http://fqHzJXEA.hmhdn.cn
http://www.dtcms.com/a/387596.html

相关文章:

  • 海外短剧分销系统开发:技术栈选型与核心模块实现指南
  • 每日前端宝藏库 | Toastify.js ✨
  • Nuxt3:自动导入渲染模式服务器引擎生产部署模块化
  • 打造高效对账单管理组件:Vue3 + Element Plus 实现客户账单与单据选择
  • 第二章 Arm C1-Premium Core技术架构
  • Bartender 6 多功能菜单栏管理(Mac)
  • 嵌入式科普(38)C语言预编译X-Macros深度分析和实际项目代码分享
  • Docker compose 与 docker swarm 的区别
  • 【嵌入式硬件实例】-555定时器实现水位检测
  • AbMole小课堂丨R-spondin-1(RSPO1):高活性Wnt通路激活剂,如何在多种类器官/干细胞培养中发挥重要功能
  • 【C语言代码】打印九九乘法口诀表
  • vue3和element plus, node和express实现大文件上传, 分片上传,断点续传完整开发代码
  • electron-egg使用ThinkPHP项目指南
  • 温州工业自动化科技工厂如何实现1台服务器10个研发设计同时用
  • 如何用PM2托管静态文件
  • Java程序设计:基本数据类型
  • 在k8s环境下部署kanboard项目管理平台
  • 为什么 MySQL utf8 存不下 Emoji?utf8mb4 实战演示
  • 2025 年 PHP 常见面试题整理以及对应答案和代码示例
  • (二十五)、在 k8s 中部署证书,为网站增加https安全认证
  • 风机巡检目前有什么新技术?
  • 震坤行工业超市开放平台接口实战:工业品精准检索与详情解析全方案
  • 河南萌新联赛2025第(八)场:南阳理工学院
  • docker回收和mysql备份导入导致数据丢失恢复---惜分飞
  • 「Memene 摸鱼日报 2025.9.17」上海张江人工智能创新小镇正式启动,华为 DCP 技术获网络顶会奖项
  • 【数据结构】顺序表,ArrayList
  • 第十二章 Arm C1-Premium GIC CPU接口详解
  • 【数据结构---并查集】(并查集的原理,实现与应用)
  • 【数据结构-KMP算法(学习篇)】
  • Start application catch exception