RabbitMq的一些概念,JMS、AMQP、MQ

一、JMS

  • JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。JMS是一种与厂商无关的 API,用来访问收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。

  • 80年代的后期,各大厂商都开始研发自己的消息队列。众多的MQ产品使用不同的API、底层使用不同的消息协议,统一MQ的使用日渐迫切。为了解决统一使用MQ的问题,在2001年JMS诞生了。JMS试图通过提供公共Java API的方式,隐藏单独MQ产品提供商的实际接口,从而解决了各种MQ使用互通的问题。

二、AMQP

  • JMS 非常棒,微软也开发了NMS(.NET 消息传递服务)来支持他们的平台和编程语言,它的效果也还不错,但使用两套不同标准的应用之间该怎么异步消息通信呢,因此,需要一个异步消息的通用标准。JMS、NMS都没有标准的底层协议,并且API是与编程语言绑定的。为了解决这个问题,AMQP诞生了。
  • AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。 

AMQP消息协议通信模型

信道:信道是建立在真实的TCP连接内的虚拟连接。AMQP的命令都是通过信道发送出去的,每条信道都会被指派一个唯一ID。一个TCP连接,对应多个信道,理论上无限制,减少TCP创建和销毁的开销,实现共用TCP的效果 

三、AMQP和JMS之间的关系

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式,JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。JMS规定了两种消息模型;而AMQP的消息模型更加丰富。 

四、消息队列MQ 

  • 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消息通信的模型,并不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。
  • MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
  • 常见的MQ产品
    • ZeroMQ、RabbitMQ、ActiveMQ、Redis、RocketMQ、Kafka

猜你喜欢

转载自blog.csdn.net/qq_39648029/article/details/108345088