JMS、AMQP和MQTT主要特性

消息传递做为基本通讯机制已经在全世界成功运用。不管是人与人、机器与人仍是机器与机器之间,消息传递一直都是惟一经常使用的通讯方式。在双方(或更多)之间交换消息有两种基本机制。编程

  同步消息传递缓存

  异步消息传递安全

  同步消息传递在这种状况下使用,当消息发送者但愿在某个时间范围内收到响应,而后再进行下一个任务。基本上就是他在收到响应前一直处于“阻塞”状态。服务器

  异步消息意味着发送者并不要求当即收到响应,并且也不会阻塞整个流程。响应无关紧要,发送者总会执行剩下的任务。网络

  上面提到的技术,当两台计算机上的程序相互通讯的时候,就普遍使用了异步消息传递。随着微服务架构的兴起,很明显咱们须要使用异步消息传递模型来构建服务。架构

  这一直是软件工程中的基本问题,并且不一样的人和组织机构会提出不一样的方法。我将介绍在企业IT系统中普遍使用的三种最成功的异步消息传递技术。异步

  Java消息传递服务(Java Messaging Service (JMS))编程语言

  JMS是最成功的异步消息传递技术之一。随着Java在许多大型企业应用中的使用,JMS就成为了企业系统的首选。它定义了构建消息传递系统的API。分布式

  异步消息传递技术JMS、AMQP和MQTT主要特性

  图片来源于网络微服务

  下面是JMS的主要特性:

  面向Java平台的标准消息传递API

  在Java或JVM语言好比Scala、Groovy中具备互用性

  无需担忧底层协议

  有queues和topics两种消息传递模型

  支持事务

  可以定义消息格式(消息头、属性和内容)

  高级消息队列协议(Advanced Message Queueing Protocol (AMQP))

  JMS很是棒并且人们也很是乐意使用它。微软开发了NMS(.NET消息传递服务)来支持他们的平台和编程语言,它效果还不错。可是碰到了互用性的问题。两套使用两种不一样编程语言的程序如何经过它们的异步消息传递机制相互通讯呢。此时就须要定义一个异步消息传递的通用标准。JMS或者NMS都没有标准的底层协议。它们能够在任何底层协议上运行,可是API是与编程语言绑定的。AMQP解决了这个问题,它使用了一套标准的底层协议,加入了许多其余特征来支持互用性,为现代应用丰富了消息传递需求。

  异步消息传递技术JMS、AMQP和MQTT主要特性

  图片来源于网络

  下面是AMQP的主要特性:

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

  消费者驱动消息传递

  跨语言和平台的互用性

  它是底层协议的

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

  面向缓存的

  可实现高性能

  支持长周期消息传递

  支持经典的消息队列,循环,存储和转发

  支持事务(跨消息队列)

  支持分布式事务(XA,X/OPEN,MS DTC)

  使用SASL和TLS确保安全性

  支持代理安全服务器

  元数据能够控制消息流

  不支持LVQ

  客户端和服务端对等

  可扩展

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

  如今咱们已经有了面向基于Java的企业应用的JMS和面向全部其余应用需求的AMQP。为何咱们还须要第三种技术?它是专门为小设备设计的。计算性能不高的设备不能适应AMQP上的复杂操做,它们须要一种简单并且可互用的方式进行通讯。这是MQTT的基本要求,而现在,MQTT是物联网(IOT)生态系统中主要成分之一。

  异步消息传递技术JMS、AMQP和MQTT主要特性

  图片来源于网络

  下面是MQTT的主要特性:

  面向流,内存占用低

  为小型无声设备之间经过低带宽发送短消息而设计

  不支持长周期存储和转发

  不容许分段消息(很难发送长消息)

  支持主题发布-订阅

  不支持事务(仅基本确认)

  消息其实是短暂的(短周期)

  简单用户名和密码,基于没有足够信息熵的安全

  不支持安全链接

  消息不透明

  Topic是全局的(一个全局的命名空间)

  支持最新值队列(Last Value Queue (LVQ) )

  客户端和服务端不对称

  不能扩展        原文:Comparison of Asynchronous Messaging Technologies: JMS, AMQP, and MQTT

相关文章
相关标签/搜索