📅  最后修改于: 2023-12-03 14:59:14.363000             🧑  作者: Mango
AMQP(Advanced Message Queuing Protocol)和JMS(Java Message Service)都是消息传递协议,在分布式系统中实现消息队列。JMS是Java平台的标准消息传递API,而AMQP是一种跨平台的协议,不只限于Java平台。
JMS是一个基于Java的API,提供了异步通信的标准方式。它侧重于Java开发环境下的异步通信,支持消息队列和主题,而且提供了基于JNDI的属性绑定和查找,以及对X.509、用户ID、密码的身份认证和授权进行管理。
AMQP则是一种独立于实现的消息协议,在通信过程中提供了更多的灵活性。它侧重于在不同平台、不同语言的应用之间传递消息,可以使用多种编程语言,且不局限于Java。
从协议的开销来看,AMQP在协议这一层上做了很多优化,将一些特定的操作封装成了更小的执行单元,更加灵活和高效。而JMS作为Java平台的标准API,做了较多的封装和规范,可能在性能上不如AMQP高效。
在传递消息的可靠性方面,AMQP比JMS更可靠。AMQP通过发布者确认机制(Publisher Confirmation)来确保消息的投递,如果消息没有被正确地发送到接收者,发布者会收到一个确认信息。而JMS则是由客户端负责同时确保消息的传递和接收。如果在传递消息过程中出现错误,JMS需要通过重传消息的方式来保证消息传递的可靠性。
一般来说,如果你的应用程序只是在Java平台上运行,而且消息通道的预期量不会太大,那么JMS是一个不错的选择。但是如果你的应用需要与其他平台或者语言进行交互,并且需要处理大量的消息通道,那么AMQP是一个更好的选择。
**注:**以上是一些基本的区别,具体使用时需要在实际的业务场景中考虑选择哪个协议。