JMS 和 AMQP - RabbitMQ

新手上路,请多包涵

我试图了解什么是 JMS 以及它如何与 AMQP 术语相关联。我知道 JMS 是一个 API 而 AMQP 是一个协议。

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

  • RabbitMQ 使用 AMQP 协议(而不是实现 AMQP 协议)
  • Java客户端需要使用AMQP协议客户端库来连接/使用RabbitMQ
  • JMS API 在哪里发挥作用? JMS API 应该使用 AMQP 客户端库连接到 RabbitMQ?
  • 通常我们使用JMS来连接RabbitMQ、ActiveMQ等Message broker,那么这里使用的默认协议是什么而不是AMQP呢?

上面的一些可能是愚蠢的。 :-) 但我试图绕过它。

原文由 Kevin Rave 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 823
2 个回答

你的问题有点乱,但让我们一一看看。

总体概念:

Java 消息服务 (JMS) API 是一种 Java 面向消息的中间件 (MOM) API,用于在两个或多个客户端之间发送消息。 JMS 是 Java Platform, Enterprise Edition 的一部分,由 Java Community Process 下开发的规范定义为 JSR 914。 它是一种消息传递标准,允许基于 Java Enterprise Edition (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 传输作为连接协议

祝你好运 :)

原文由 Freak 发布,翻译遵循 CC BY-SA 4.0 许可协议

让我们从基础开始。

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

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

根据以上内容,采用 JMS API 的框架,RabbitMQ 及其 Java 客户端 API 的一个实例,可以开发一个使用 RabbitMQ 的 JMS 实现:在这一点上,唯一需要做的就是实现根据 JMS 规范交换模式(通过 RabbitMQ)。

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

原文由 Paolo Maresca 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题