RabbitMQ复习<一>基本概念

RabbitMQ复习<一>基本概念

一.什么是MQ

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

  • 使用场景:

    • 核心应用
      • 解耦:订单系统-》物流系统
      • 异步:用户注册-》发送邮件,初始化信息
      • 削峰:秒杀、日志处理
    • 跨平台 、多语言
    • 分布式事务、最终一致性
    • RPC调用上下游对接,数据源变动->通知下属

二.AMQP和JMS消息服务

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

由于JMS或者NMS都没有标准的底层协议,API是与编程语言绑定的,每个消息队列厂商就存在多种不同格式规范的产品,对使用者就产生了很多问题, AMQP解决了这个问题,它使用了一套标准的底层协议。(制定了MQ规范)

  • 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天然性就是跨平台(**JMS也可以实现跨平台,但需要针对不同语言进行规范的制定,相对AMPQ天然性而言麻烦一些 **)
  • 比如Java语言产生的消息,可以用其他语言比如python的进行消费
  • AQMP可以用http来进行类比,不关心实现接口的语言,只要都按照相应的数据格式去发送报文请求,不同语言的client可以和不同语言的server进行通讯
  • JMS消息类型:TextMessage/ObjectMessage/StreamMessage等
  • AMQP消息类型:Byte[]

三.MQTT

  • MQTT: 消息队列遥测传输(Message Queueing Telemetry Transport )
  • 作用场景
    • 计算性能不高的设备不能适应AMQP上的复杂操作,MQTT它是专门为小设备设计的
    • MQTT主要是是物联网(IOT)中大量的使用
    • 主要面对智能家居(智能开关,智能窗帘…)
  • 特性
    • 内存占用低,为小型无声设备之间通过低带宽发送短消息而设计
    • 不支持长周期存储和转发,不允许分段消息(很难发送长消息)
    • 支持主题发布-订阅、不支持事务(仅基本确认)
    • 消息实际上是短暂的(短周期)
    • 简单用户名和密码、不支持安全连接、消息不透明

你可能感兴趣的:(Java,MQ,队列,java,大数据,rabbitmq)