第 9 章 发送异步消息

本章内容:

  • 异步化的消息;

  • 使用JMS、RabbitMQ和Kafka发送消息;

  • 从代理拉取消息;

  • 监听消息。

假设现在是星期五16时55分,再有几分钟你就可以开始期待已久的休假了。现在,你的时间只够开车到机场赶上航班。但是在你离开之前,你需要确定领导和同事了解你目前的工作进展,这样他们就可以在星期一继续完成你留下的工作。不过,你的一些同事已经提前离开了,而你的领导正在忙于开会。你该怎么办呢?

要想既让你的工作状态有效传达又赶上飞机,最有效的方式就是给你的领导和同事发送一封电子邮件,详述工作进展并且承诺给他们寄张明信片。你不知道他们在哪里,也不知道他们什么时候才能真正读到你的邮件。但是你知道,他们终究会回到他们的办公桌旁,阅读你的邮件。而此时,你可能正在赶往机场的路上。

同步通信,比如我们在前面所看到的REST,有它自己的适用场景。不过,对于开发者而言,这种通信方式并不是应用程序之间交互的唯一方式。异步消息是一个应用程序向另一个应用程序间接发送消息的一种方式,这种间接性能够为通信的应用带来更松散的耦合和更大的可伸缩性。

在本章中,我们将会使用异步消息从Taco Cloud Web站点发送订单信息到一个单独的应用——Taco Cloud的厨房中。这也是我们制作taco的地方。我们会考虑Spring提供的3种异步消息方案:Java消息服务(Java Message Service, JMS)、RabbitMQ及高级消息队列协议(Advanced Message Queueing Protocol,AMQP)、Apache Kafka。除了基本的发送和接收消息,我们还会去了解Spring对消息驱动POJO的支持,它是一种与EJB的消息驱动bean(Message-Driven Bean,MDB)类似的消息接收方式。