# 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/