> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v5/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-v5/di-8-zhang-fa-song-yi-bu-xiao-xi.md).

# 第 8 章 发送异步消息

本章内容：

* 异步消息
* 使用 JMS、RabbitMQ 和 Kafka 发送消息
* 从 Broker 拉取消息
* 监听消息

现在是星期五下午 4 点 55 分。你还有几分钟就要开始期待已久的假期了。你有足够的时间开车去机场赶飞机。但是在你打包好行李准备出去的时候，你需要确保你的老板和同事们知道你一直在做的工作的状态，这样周一他们可以从你断掉的地方接着做。不幸的是，你的一些同事已经跳过了周末，并且你的老板一直在开会。你该做些什么？

这是最实用的办法就是，向老板和同事发一封简短的电子邮件，详细说明你的进展情况，并承诺寄张明信片，这样做既能传达你的所处的工作做到的地步，又能赶上飞机。你不知道他们在哪里，也不知道他们什么时候会读这封邮件，但你知道他们最终会回到自己的办公桌上读这封邮件。与此同时，你正在去机场的路上。

*同步* 通信有它的地位，这是我们在 REST 中所看到的。但这并不是开发人员可以使用的惟一应用程序间通信方式。异步消息传递是一种间接地将消息从一个应用程序发送到另一个应用程序而无需等待响应的方式。这种间接方式提供了通信应用程序之间更松散的耦合和更大的可伸缩性。

在本章中，将使用异步消息传递将订单从 Taco Cloud 网站发送到 Taco Cloud 厨房中的一个独立应用程序，在那里将准备 tacos。我们将考虑 Spring 为异步消息传递提供的三个选项：Java 消息服务（JMS）、RabbitMQ 和高级消息队列协议（AMQP）以及 Apache Kafka。除了基本的消息发送和接收之外，我们还将了解 Spring 对消息驱动 POJO 的支持：一种类似于 EJB 的消息驱动 bean（MDB）的消息接收方式。
