消息队列之JMS&AMQP简介与对比

(一)JMS简介

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

体系架构

JMS元素 说明
JMS提供者 连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
JMS客户  生产或消费基于消息的Java的应用程序或对象。
JMS生产者 创建并发送消息的JMS客户。
JMS消费者 接收消息的JMS客户。
JMS消息  包括可以在JMS客户之间传递的数据的对象
JMS队列  一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。
JMS主题  一种支持发送消息给多个订阅者的机制。

消息类型

  1. 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
  2. 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。
消息队列之JMS&AMQP简介与对比_第1张图片

(二)AMQP简介

高级消息队列协议,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。

主要功能

模块 说明
exchange 接收发布应用程序发送的消息,并根据一定的规则将这些消息路由到“消息队列。
message queue 存储消息,直到这些消息被消费者安全处理完为止。
binding 定义了exchange和message queue之间的关联,提供路由规则。

消息类型

  1. 存储转发:多个消息发送者,单个消息接收者。
  2. 分布式事务:多个消息发送者,多个消息接收者。
  3. 发布订阅:多个消息发送者,多个消息接收者。
  4. 基于内容的路由:多个消息发送者,多个消息接收者。
  5. 文件传输队列:多个消息发送者,多个消息接收者。
  6. 点对点连接:单个消息发送者,单个消息接收者。

(三)JMS与AMQP的区别

JMS AMQP
定义 java API 网络线级协议
跨平台
跨语言
Model 1.peer-2-Peer
2.pub / sub
1.direct exchange
2.fnout exchange
3.topic change
4.headers exchange
5.system exchange
后四种都是pub/sub ,差别路由机制做了更详细的划分
支持消息类型 TextMessage
MapMessage
ByteMessage
StreamMessage
ObjectMessage
Message
byte[ ]
当实际应用时,有复杂的消息,可以将消息序列化后发送
综合评价 JMS定义了java api层面的标准,在java体系中,多个client均可通过JMS进行交互,不需要应用修啊给i代码,但是其跨平台的支持较差。 AMQP定义了wire-level层的协议标准,天然具有跨平台,跨语言的特性

(四)SpringBoot的支持

  1. spring-jms提供了对JMS的支持

  2. spring-rabbit提供了对AMQP的支持(具体可见官网文档)
    消息队列之JMS&AMQP简介与对比_第2张图片

  3. 需要创建ConnectionFactory的实现来连接消息代理

  4. 提供JmsTemplate,RabbitTemplate来发送消息

  5. @JmsListener(JMS).@RabbitListener(AMQP)注解在方法上的监听消息代理发布的消息

  6. @EnableJms,@EnableRabbit开启支持

  7. SpringBoot的自动配置
    1)JmsAutoConfiguration
    2)RabbitAutoConfiguration

(五)消息队列实列

异步处理 同步方机制 消息队列之JMS&AMQP简介与对比_第3张图片
并发机制 消息队列之JMS&AMQP简介与对比_第4张图片
消息队列机制 消息队列之JMS&AMQP简介与对比_第5张图片
应用解耦 耦合应用 消息队列之JMS&AMQP简介与对比_第6张图片
解耦应用 消息队列之JMS&AMQP简介与对比_第7张图片
流量削峰 消息队列之JMS&AMQP简介与对比_第8张图片

你可能感兴趣的:(SpringBoot)