JMS与AMQP与MQTT

JMS

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

JMS是⼀种与⼚商⽆关的 API,⽤来访问消息收发系统 消息,它类似于JDBC(Java Database Connectivity)。 这⾥,JDBC 是可以⽤来访问许多不同关系数据库的 API。

是由Sun公司早期提出的消息标准,旨在为java应⽤提 供统⼀的消息操作,包括create、send、receive。

特性

⾯向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都没有标准的底层协议,它们可以在任何底层协议上运⾏,但是API是与编程语⾔绑定的,AMQP解决了这个问题,它使⽤了⼀套标准的底层协议。

AMQP(advanced message queuing protocol)在 2003年时被提出,最早⽤于解决⾦融领不同平台之间 的消息传递交互问题,就是⼀种协议,兼容JMS。

更准确说的链接协议 binary- wire-level-protocol 直接 定义⽹络交换的数据格式,类似http。

具体的产品实现⽐较多,RabbitMQ就是其中⼀种。

特性

独⽴于平台的底层消息传递协议

消费者驱动消息传递

跨语⾔和平台的互⽤性、属于底层协议

有5种交换类型direct,fanout,topic,headers, system

⾯向缓存的、可实现⾼性能、⽀持经典的消息队列,循环,存储和转发

⽀持⻓周期消息传递、⽀持事务(跨消息队列)

AMQP和JMS的主要区别

1.AMQP不从API层进⾏限定,直接定义⽹络交换的数据 格式,这使得实现了AMQP的provider天然性就是跨平台

⽐如Java语⾔产⽣的消息,可以⽤其他语⾔⽐如python 的进⾏消费

2.AQMP可以⽤http来进⾏类⽐,不关⼼实现接⼝的语⾔,只要都按照相应的数据格式去发送报⽂请求,不同语⾔的client可以和不同语⾔的server进⾏通讯

3.JMS消息类型: TextMessage/ObjectMessage/StreamMessage等

AMQP消息类型:Byte[]

MQTT

MQTT: 消息队列遥测传输(Message Queueing Telemetry Transport )

计算性能不⾼的设备不能适应AMQP上的复杂操 作,MQTT它是专⻔为⼩设备设计的。

MQTT主要是是物联⽹(IOT)中⼤量的使⽤。

特性

内存占⽤低,为⼩型⽆声设备之间通过低带宽发送 短消息⽽设计。

不⽀持⻓周期存储和转发,不允许分段消息(很难 发送⻓消息)。

⽀持主题发布-订阅、不⽀持事务(仅基本确认)。

消息实际上是短暂的(短周期)。

简单⽤户名和密码、不⽀持安全连接、消息不透明。


JMS与AMQP与MQTT
http://hanqichuan.com/2023/06/20/mq/JMS与AMQP与MQTT/
作者
韩启川
发布于
2023年6月20日
许可协议