articleList

02-MQ 消息中间件+JMS+AMQP 核心知识

2025/03/16 posted in  RabbitMQ
Tags: 

什么是 MQ 消息中间件和应用场景

  • 什么是 MQ 消息中间件

    • 全称 MessageQueue,主要是用于程序和程序直接通信,异步+解耦
  • 使用场景

    • 核心应用

      • 解耦

        • 订单系统-》物流系统
      • 异步

        • 用户注册-》发送邮件,初始化信息
      • 削峰

        • 秒杀、日志处理
    • 分布式事务、最终一致性

    • RPC 调用上下游对接,数据源变动->通知下属

JMS 消息服务和和常见核心概念介绍

  • 什么是 JMS

    • Java 消息服务(Java Message Service),Java 平台中关于面向消息中间件的接口。

      • JMS 是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于 JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API
      • 是由 Sun 公司早期提出的消息标准,旨在为 Java 应用提供统一的消息操作,包括 create、send、receive
      • JMS 是针对 Java 的,微软开发了 NMS(.NET 消息传递服务)

  • 特性

    • 面向 Java 平台的标准消息传递 API
    • 在 Java 或 JVM 语言比如 Scala、Groovy 中具有互用性
    • 无需担心底层协议
    • 有 queues 和 topics 两种消息传递模型
    • 支持事务、能够定义消息格式(消息头、属性和内容)
  • 常见概念

    概念 解释
    JMS 提供者 连接面向消息中间件的,JMS 接口的一个实现,RocketMQ,ActiveMQ,Kafka 等等
    JMS 生产者(Message Producer) 生产消息的服务
    JMS 消费者(Message Consumer) 消费消息的服务
    JMS 消息 数据对象
    JMS 队列 存储待消费消息的区域
    JMS 主题 一种支持发送消息给多个订阅者的机制
    JMS 消息通常有两种类型 点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)
  • 基础编程模型

    MQ 中需要用的一些类 解释
    ConnectionFactory 连接工厂,JMS 用它创建连接
    Connection JMS 客户端到 JMS Provider 的连接
    Session 一个发送或接收消息的线程
    Destination 消息的目的地;消息发送给谁
    MessageConsumer / MessageProducer 消息消费者,消息生产者

高级消息队列协议 AMQP 介绍和 MQTT 拓展

  • 背景

    • JMS 或者 NMS 都没有标准的底层协议,它们可以在任何底层协议上运行,但是 API 是与编程语言绑定的,AMQP 解决了这个问题,它使用了一套标准的底层协议
  • 什么是 AMQP

    • AMQP(advanced message queuing protocol)在 2003 年时被提出,最早用于解决金融领域不同平台之间的消息传递交互问题,就是一种协议,兼容 JMS
    • 更准确说的链接协议 binary- wire-level-protocol 直接定义网络交换的数据格式,类似 http
    • 具体的产品实现比较多,RabbitMQ 就是其中一种

  • 特性

    • 独立于平台的底层消息传递协议
    • 消费者驱动消息传递
    • 跨语言和平台的互用性、属于底层协议
    • 有 5 种交换类型 direct,fanout,topic,headers,system
    • 面向缓存的、可实现高性能、支持经典的消息队列,循环,存储和转发
    • 支持长周期消息传递、支持事务(跨消息队列)
  • AMQP 和 JMS 的主要区别

    • AMQP 不从 API 层进行限定,直接定义网络交换的数据格式,这使得实现了 AMQP 的 provider 天然性就是跨平台
    • 比如 Java 语言产生的消息,可以用其他语言比如 python 的进行消费
    • AQMP 可以用 http 来进行类比,不关心实现接口的语言,只要都按照相应的数据格式去发送报文请求,不同语言的 client 可以和不同语言的 server 进行通讯
    • JMS 消息类型:TextMessage/ObjectMessage/StreamMessage 等
    • AMQP 消息类型:Byte[]
  • 科普:大家可能也听过 MQTT

    • MQTT

      • 消息队列遥测传输(Message Queueing Telemetry Transport)
    • 背景

      • 我们有面向基于 Java 的企业应用的 JMS 和面向所有其他应用需求的 AMQP,那这个 MQTT 是做啥的?
    • 原因

      • 计算性能不高的设备不能适应 AMQP 上的复杂操作,MQTT 它是专门为小设备设计的
      • MQTT 主要是是物联网(IOT)中大量的使用
    • 特性

      • 内存占用低,为小型无声设备之间通过低带宽发送短消息而设计
      • 不支持长周期存储和转发,不允许分段消息(很难发送长消息)
      • 支持主题发布-订阅、不支持事务(仅基本确认)
      • 消息实际上是短暂的(短周期)
      • 简单用户名和密码、不支持安全连接、消息不透明