JMS和AMQP

我想了解JMS以及它如何连接到AMQP术语。 我知道JMS是一个API,AMQP是一个协议。

这是我的假设(以及问题)

  • RabbitMQ使用AMQP协议(而非实现AMQP协议)
  • Java客户端需要使用AMQP协议客户端库来连接/使用RabbitMQ
  • JMS API在哪里发挥作用? JMS API应该使用AMQP客户端库连接到RabbitMQ?
  • 通常我们使用JMS来连接Message Broker,比如RabbitMQ,ActiveMQ等等。那么这里使用的默认协议是什么而不是AMQP?
  • 上面的一些可能是愚蠢的。 :-)但试图把我的头围绕它。


    你的问题有点混乱,类似问题论文中的一个棘手问题:)(因为老师总是试图提出复杂的简单问题:DI希望你不是老师:))让我们一个接一个看看所有这些。

    如你所知:

    Java消息服务(JMS)API是用于在两个或更多客户端之间发送消息的Java消息中间件(MOM)API 。 JMS是Java平台企业版的一部分,并且由在Java Community Process下开发的规范定义为JSR 914. 它是一种消息传递标准,允许基于Java企业版(Java EE)的应用程序组件创建,发送,接收和阅读消息。 它允许分布式应用程序的不同组件之间的通信松耦合,可靠和异步

    现在(来自Wikipedia):

    高级消息队列协议(AMQP)是面向消息中间件的开放标准应用层协议。 AMQP的定义特征是消息定向,排队,路由(包括点对点和发布和订阅),可靠性和安全性。

    最重要的事情(再次来自维基百科):

    与仅仅定义API的JMS不同,AMQP是一个有线协议。 线级协议是对通过网络以八位位组流的形式发送的数据格式的描述。 因此,任何可以创建和解释符合该数据格式的消息的工具都可以与任何其他兼容工具进行互操作,而不考虑实现语言

    一些重要的事情你应该知道:

  • 请记住,AMQP是一种不实现JMS API的消息传递技术。
  • JMS是API,AMQP是一种协议。因此,说JMS的默认协议是什么意思,当然客户端应用程序在调用WebLogic Web Service时使用HTTP / S作为连接协议。
  • JMS只是一个API规范。 它不使用任何协议。 JMS提供者(如ActiveMQ)可以使用任何底层协议来实现JMS API。 例如:Apache ActiveMQ可以使用以下任何协议:AMQP,MQTT,OpenWire,REST(HTTP),RSS和Atom,Stomp,WSIF,WS Notification,XMPP。 我建议你阅读使用JMS传输作为连接协议。
  • 祝你好运 :)


    我们从基础开始。

    RabbitMQ是一个MOM(面向消息的中间件),用Erlang(面向TLC的编程语言)开发并实现有线协议AMQP (高级消息队列协议)。 目前,许多客户端API(例如,Java,C ++,RESTful等)都可以使用RabbitMQ消息服务。

    JMS (Java消息传递服务)是JCP标准,定义了一由MOM实现的结构化API 。 ActiveMQ实现(即兼容)JMS API的MOM的一个例子是ActiveMQ; 还有HornetMQ和其他人。 这些中间件获取JMS API并相应地实现交换模式。

    根据以上所述,以JMS API的框架,RabbitMQ及其Java Client API的实例为基础,可以开发一个使用RabbitMQ的JMS实现:在这一点上,唯一必须做的就是实现根据JMS规范交换模式(通过RabbitMQ)。

    关键是:无论技术如何(本例中为RabbitMQ),都可以实现一组API,如JMS。


    JMS在定义时未定义JMS客户端和消息传递服务器之间的协议。 实现JMS API的JMS客户端可以使用任何协议与消息传递服务器进行通信。 客户端只需要符合JMS API。 就这样。 通常JMS客户端使用他们的消息服务器可以理解的自定义协议。

    另一方面,AMQP是消息传递客户端和消息传递服务器之间的协议。 JMS客户端可以使用AMQP作为与消息传递服务器进行通信的协议。 还有像这样的客户。

    http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server

    链接地址: http://www.djcxy.com/p/34115.html

    上一篇: JMS and AMQP

    下一篇: Message broker vs. MOM (Message