JMS 和 AMQP - RabbitMQ

2022-08-31 07:38:20

我试图理解JMS是什么,以及它如何与AMQP术语联系起来。我知道JMS是一个API,AMQP是一个协议。

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

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

以上一些可能是愚蠢的。:-)但是试图把我的头缠绕在它上面。


答案 1

你的问题有点乱,但让我们一个接一个地看看它。

一般概念:

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

现在(来自维基百科):

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

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

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

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

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

祝你好运:)


答案 2

让我们从基础开始。

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

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

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

关键是:一组API,如JMS,无论技术如何都可以实现(在这种情况下,RabbitMQ)。


推荐