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
https://spring.io/understanding/AMQP
AMQP(高级消息队列协议)是一种公开发布的电汇 异步消息传递规范。传输的每个字节 数据已指定。这个特性允许编写库 在许多语言中,并在多个操作系统和CPU上运行 架构,这是一个真正可互操作的跨平台 消息标准。 AMQP经常与最常见的JMS(Java消息服务)进行比较 Java社区中的消息传递系统。 JMS的局限性在于 指定了API,但消息格式不是。与AMQP不同, JMS不要求如何形成和传输消息。 从本质上讲,每个JMS代理都可以在a中实现消息 格式不同。他们只需要使用相同的API。
AMQP(高级消息队列协议)是一种公开发布的电汇 异步消息传递规范。传输的每个字节 数据已指定。这个特性允许编写库 在许多语言中,并在多个操作系统和CPU上运行 架构,这是一个真正可互操作的跨平台 消息标准。
AMQP经常与最常见的JMS(Java消息服务)进行比较 Java社区中的消息传递系统。 JMS的局限性在于 指定了API,但消息格式不是。与AMQP不同, JMS不要求如何形成和传输消息。 从本质上讲,每个JMS代理都可以在a中实现消息 格式不同。他们只需要使用相同的API。
我怀疑你可能正在寻找 这个文件 其中部分说:
适用于vFabric的JMS客户端RabbitMQ是vFabric的客户端库 RabbitMQ的。 vFabric RabbitMQ不是JMS提供者,但具有功能 需要支持JMS队列和主题消息传递模型。 JMS客户端 for RabbitMQ实现了JMS 1.1规范 RabbitMQ Java客户端API,从而允许新的和现有的JMS 通过Advanced Message与RabbitMQ代理连接的应用程序 排队协议(AMQP)。
JMS是一个API,所以一些JMS API是通过AMQP协议实现的(比如 Apache QPID JMS )而大多数JMS API使用其他协议。如果AMQP协议的版本相同,则此类客户端应该能够与另一个AMQP客户端通信。
这取决于您对该JMS API的配置。对于ActiveMQ,它可能是 AMQP 但默认情况下它是'openwire'
让我们从基础开始。
的 的RabbitMQ 强> 是个妈妈 (面向消息的中间件),使用Erlang(面向TLC的编程语言)和 的 实现有线协议AMQP 强> (高级消息队列协议)。 目前,许多客户端API(例如,Java,C ++,RESTful等)可用于实现RabbitMQ消息传递服务的使用。
的 JMS 强> (Java Messaging Service)是定义a的JCP标准 的 一组结构化的API 强> 由MOM实施。实现(即兼容)JMS API的MOM的一个例子是ActiveMQ;还有HornetMQ和其他人。这些中间件获取JMS API并相应地实现交换模式。
根据上面的内容,采用JMS API的框架,RabbitMQ的一个实例及其Java客户端API,可以开发一个利用RabbitMQ的JMS实现:在这一点上,唯一需要做的就是实现根据JMS规范交换模式(通过RabbitMQ)。
关键是: 无论采用何种技术,都可以实现一组API,如JMS (在这种情况下,RabbitMQ)。
你的问题有点乱,在问题文件中类似于一个棘手的问题:)(因为老师总是试图提出复杂的简单问题:D我希望你不是老师:))让我们逐一看到所有这些问题。
如你所知:
Java消息服务 的 (JMS)API是一种Java消息中间件(MOM)API,用于在两个或多个客户端之间发送消息 强> 。 JMS是Java平台企业版的一部分,由Java Community Process下的JSR 914开发的规范定义。 的 它是一种消息传递标准,允许基于Java Enterprise Edition(Java EE)的应用程序组件创建,发送,接收和读取消息。它允许分布式应用程序的不同组件之间的通信松散耦合,可靠和异步 强> 。
现在 (从 维基百科 ):
的 高级消息队列协议(AMQP) 强> 是面向消息的中间件的开放标准应用层协议。该 定义AMQP的功能是消息定向,排队,路由 (包括点对点和发布 - 订阅),可靠性和 安全。
而最重要的事情(再次来自维基百科):
与仅定义API的JMS不同,AMQP是线级的 协议。线级协议是对格式的描述 通过网络作为八位字节流发送的数据。 因此任何可以创建和解释消息的工具 符合此数据格式可以与任何其他兼容的互操作 工具与实施语言无关
你应该知道一些重要的事情:
祝好运 :)