跳到主要内容

使用 Spring AMQP

DeepSeek V3 中英对照 Using Spring AMQP

本章探讨了使用 Spring AMQP 开发应用程序时作为核心组件的接口和类。

章节摘要

📄️ AMQP 抽象

Spring AMQP 由两个模块组成(每个模块在发行版中由一个 JAR 表示):spring-amqp 和 spring-rabbit。spring-amqp 模块包含 org.springframework.amqp.core 包。在该包中,你可以找到表示核心 AMQP “模型”的类。我们的目标是提供不依赖于任何特定 AMQP 代理实现或客户端库的通用抽象。最终用户代码可以在不同厂商的实现之间更具可移植性,因为它可以仅针对抽象层进行开发。这些抽象随后由特定代理的模块实现,例如 spring-rabbit。目前只有 RabbitMQ 的实现。然而,这些抽象已经在 .NET 中使用 Apache Qpid 和 RabbitMQ 进行了验证。由于 AMQP 在协议级别上运行,原则上,你可以将 RabbitMQ 客户端与支持相同协议版本的任何代理一起使用,但目前我们不会测试任何其他代理。

📄️ AmqpTemplate

与 Spring 框架及相关项目提供的许多其他高级抽象一样,Spring AMQP 提供了一个扮演核心角色的“模板”。定义主要操作的接口称为 AmqpTemplate。这些操作涵盖了发送和接收消息的通用行为。换句话说,它们并不特定于任何实现——因此名称中带有“AMQP”。另一方面,该接口的实现与 AMQP 协议的实现紧密相关。与 JMS(本身是一个接口级 API)不同,AMQP 是一个线路级协议。该协议的实现提供了自己的客户端库,因此模板接口的每个实现都依赖于特定的客户端库。目前,只有一个实现:RabbitTemplate。在接下来的示例中,我们经常使用 AmqpTemplate。然而,当您查看配置示例或任何实例化模板或调用 setter 方法的代码片段时,您可以看到实现类型(例如 RabbitTemplate)。

📄️ Broker 事件监听器

当启用 Event Exchange 插件时,如果你在应用程序上下文中添加了一个类型为 BrokerEventListener 的 bean,它会将选定的 broker 事件作为 BrokerEvent 实例发布,这些事件可以通过普通的 Spring ApplicationListener 或 @EventListener 方法进行消费。事件由 broker 发布到一个名为 amq.rabbitmq.event 的主题交换器(topic exchange),每个事件类型都有不同的路由键。监听器使用事件键,这些键用于将一个匿名队列(AnonymousQueue)绑定到交换器,以便监听器仅接收选定的事件。由于这是一个主题交换器,因此可以使用通配符(以及显式请求特定事件),如下例所示: