# MQ简介
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
# 什么是MQ消息中间件和应用场景
MQ(Message Queue):用于程序间的异步通信,实现解耦与流量削峰。
典型应用场景:
- 解耦:订单系统 → 物流系统
- 异步:用户注册 → 发送邮件、初始化信息
- 削峰:秒杀、日志处理
- 跨平台、多语言兼容
- 分布式事务、最终一致性
- 上下游数据源变动通知
![]()
# JMS 简介及核心概念
JMS(Java Message Service):Java 平台的消息服务接口,类似 JDBC,提供统一的消息操作 API。
特点:
- Java 标准消息 API,跨 JVM 语言互通
- 无需关注底层协议
- 提供两种消息模型:Queue(点对点)和 Topic(发布/订阅)
- 支持事务与消息格式定义(头、属性、内容)
核心概念:
- JMS 提供者:实现 JMS 接口的消息中间件,如 RocketMQ、ActiveMQ、Kafka
- Producer / Consumer:消息发送者与接收者
- Queue / Topic:点对点 vs. 发布订阅模型
基础模型类:
ConnectionFactory:连接工厂Connection:连接Session:消息处理线程Destination:目标地址(Queue/Topic)MessageProducer / MessageConsumer:生产者/消费者
# AMQP 协议与 MQTT 简介
背景:
- JMS/NMS 无标准底层协议,跨平台不便。AMQP 统一网络协议格式,解决这一问题。
AMQP(Advanced Message Queuing Protocol):
- 起源于金融行业,协议级标准,支持多语言
- 类似 HTTP,是二进制传输协议
- 代表实现:RabbitMQ
特点:
- 与平台无关,底层协议定义标准
- 支持事务、消息确认、长周期传递
- 提供 5 种交换方式:direct、fanout、topic、headers、system
与 JMS 的区别:
- JMS 是 Java API 层标准;AMQP 是网络协议标准,支持跨语言
- JMS 关注接口;AMQP 关注报文格式
- JMS 消息类型:Text/Object/Stream 等;AMQP:byte[]
MQTT 简介:
- 面向小设备的轻量协议,主要用于物联网(IoT)
- 特点:
- 占用资源小,适用于低带宽
- 不支持事务和长消息
- 仅支持短周期消息、简单认证,安全性低
# 主流 MQ 产品对比与选型建议
| 名称 | 简介 | 优缺点简述 |
|---|---|---|
| ActiveMQ | Apache 出品,JMS 实现,支持多语言客户端 | 吞吐量低、性能下降快,已逐步减少使用 |
| Kafka | 高吞吐流处理平台,支持发布订阅,副本机制保障数据可靠 | 运维复杂、学习曲线较陡,文档不够完善 |
| RocketMQ | 阿里出品,纯 Java 实现,支持事务、延迟消息、失败重试 | 社区不活跃,版本更新频繁 |
| RabbitMQ | AMQP 协议实现,Erlang 编写,支持多语言,功能完备 |
ActiveMQ:http://activemq.apache.org/
Kafka:http://kafka.apache.org/
RocketMQ:http://rocketmq.apache.org/
RabbitMQ:http://www.rabbitmq.com/
