温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - JMS and AMQP
amqp java jms rabbitmq message-queue

java - JMS和AMQP

发布于 2020-04-11 13:33:28

我正在尝试了解什么JMS及其如何与AMQP术语连接。我知道JMS是API,AMQP是协议。

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

  • RabbitMQ使用AMQP协议(而是实现AMQP协议)
  • Java客户端需要使用AMQP协议客户端库来连接/使用RabbitMQ
  • JMS API在这里起什么作用?JMS API应该使用AMQP客户端库连接到RabbitMQ吗?
  • 通常,我们使用JMS连接诸如RabbitMQ,ActiveMQ等消息代理,然后在这里使用默认协议代替AMQP呢?

以上某些内容可能是愚蠢的。:-)但是,想把我的头缠住它。

查看更多

提问者
Kevin Rave
被浏览
97
18.1k 2017-09-05 16:22

您的问题有点混乱,类似于试卷中的一个棘手问题:)(因为老师总是想问一些简单的问题,使复杂的:DI希望您不是老师:))让我们一个个地查看所有这些问题。

如你所知:

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

现在(来自维基百科):

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

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

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

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

  1. 请记住,AMQP是不实现JMS API的消息传递技术。
  2. JMS是API,AMQP是协议,因此说JMS的默认协议是什么毫无意义,当然客户端应用程序在调用WebLogic Web Service时会使用HTTP / S作为连接协议。
  3. JMS只是API规范。它不使用任何协议。JMS提供程序(例如ActiveMQ)可以使用任何基础协议来实现JMS API。例如:Apache ActiveMQ可以使用以下任何协议:AMQP,MQTT,OpenWire,REST(HTTP),RSS和Atom,Stomp,WSIF,WS Notification,XMPP。我建议您阅读使用JMS传输作为连接协议

祝好运 :)