跳到主要内容
版本:4.1.1

使用 Spring AMQP

Doubao 中英对照 Using Spring AMQP

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

章节摘要​

📄️AMQP 抽象

Spring AMQP 由两个模块组成(分发包中各对应一个 JAR): spring-amqp 和 spring-rabbit。'spring-amqp' 模块包含 org.springframework.amqp.core 包。在该包中,你可以找到代表核心 AMQP“模型”的类。我们的意图是提供不依赖任何特定 AMQP broker 实现或客户端库的通用抽象。最终用户代码可以更方便地跨厂商实现 移植,因为它只针对抽象层开发。这些抽象随后由特定于 broker 的模块 (例如 'spring-rabbit')实现。目前只有一个 RabbitMQ 实现。 不过,除 RabbitMQ 之外,这些抽象还在 .NET 中使用 Apache Qpid 得到了验证。由于 AMQP 工作在协议层,原则上你可以将 RabbitMQ 客户端用于任何支持相同协议版本的 broker,但我们目前不测试其他 broker。

📄️AmqpTemplate

与 Spring Framework 及相关项目提供的许多其他高级抽象一样, Spring AMQP 提供了一个起核心作用的“模板”。定义主要操作的接口 名为 AmqpTemplate。这些操作涵盖发送和接收消息的一般行为。换句话说, 它们并非任何实现所独有——因此名称中有“AMQP”。另一方面,该接口 也有一些与 AMQP 协议实现绑定的实现。与 JMS 本身就是接口级 API 不同,AMQP 是线级协议。该协议的实现提供自己的客户端库,因此模板 接口的每个实现都依赖于特定的客户端库。目前只有一个实现: RabbitTemplate。在下面的示例中,我们经常使用 AmqpTemplate。不过, 当你查看配置示例或任何实例化模板或调用 setter 的代码摘录时,就能 看到实现类型(例如 RabbitTemplate)。

📄️Broker 事件监听器

启用 Event Exchange Plugin 后,如果你向应用程序上下文添加一个 BrokerEventListener 类型的 bean,它会将选定的 broker 事件发布为 BrokerEvent 实例,可以用普通的 Spring ApplicationListener 或 @EventListener 方法消费这些事件。broker 将事件发布到 topic 交换机 amq.rabbitmq.event,每种事件类型对应不同的路由键。监听器使用 事件键,这些键用于将 AnonymousQueue 绑定到该交换机,从而使监听器 只接收选定的事件。由于它是 topic 交换机,可以使用通配符(也可以显式 请求特定事件),如下例所示: