> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/untitled-10/untitled-1.md).

# 17.3　使用 AMQP 实现消息功能

你可能会疑惑为什么还需要另外一个消息规范。难道 JMS 还不够好吗？AMQP 提供了哪些 JMS 所不具备的特性呢？

实际上，AMQP 具有多项 JMS 所不具备的优势。首先，AMQP 为消息定义了线路层（wire-level protocol）的协议，而 JMS 所定义的是 API 规范。JMS 的 API 协议能够确保所有的实现都能通过通用的 API 来使用，但是并不能保证某个 JMS 实现所发送的消息能够被另外不同的 JMS 实现所使用。而 AMQP 的线路层协议规范了消息的格式，消息在生产者和消费者间传送的时候会遵循这个格式。这样 AMQP 在互相协作方面就要优于 JMS —— 它不仅能跨不同的 AMQP 实现，还能跨语言和平台。

相比 JMS，AMQP 另外一个明显的优势在于它具有更加灵活和透明的消息模型。使用 JMS 的话，只有两种消息模型可供选择：点对点和发布-订阅。这两种模型在 AMQP 当然都是可以实现的，但 AMQP 还能够让我们以其他的多种方式来发送消息，这是通过将消息的生产者与存放消息的队列解耦实现的。

Spring AMQP 是 Spring 框架的扩展，它能够让我们在 Spring 应用中使用 AMQP 风格的消息。稍后可以看到，Spring AMQP 提供了一个 API，借助这个 API，我们能够以非常类似于 Spring JMS 抽象的形式来使用 AMQP。这意味着，我们在本章之前所学习的 JMS 内容能够帮助你理解如何使用 Spring AMQP 来发送和接收消息。

我们稍后就会介绍如何使用 Spring AMQP，但是在深入学习如何在 Spring 中发送和接收消息之前，首先看一下到底是什么让 AMQP 如此引人关注。
