1.7 版本相较于 1.6 版本的变更
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的新版 4.0.x 版本的 amqp-client 库。该客户端默认配置了自动恢复功能。请参阅 RabbitMQ 自动连接/拓扑恢复。
4.0.x 客户端默认启用自动恢复功能。虽然与该功能兼容,但 Spring AMQP 自身也具有其恢复机制,客户端的恢复功能通常并不需要。我们建议禁用 amqp-client 自动恢复功能,以避免在代理可用但连接尚未恢复时出现 AutoRecoverConnectionNotCurrentlyOpenException 个实例。从版本 1.7.1 开始,Spring AMQP 默认禁用该功能,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给 CachingConnectionFactory。由 RabbitConnectionFactoryBean 创建的 RabbitMQ ConnectionFactory 实例也默认禁用该选项。 |
Log4j 2 升级
Log4j 2 的最低版本(针对 AmqpAppender)现已更新为 2.7。该框架不再与旧版本兼容。有关更多信息,请参阅 日志子系统 AMQP 追加器。
Spring 重试升级
最低 Spring 重试版本现已为 1.2。该框架不再与旧版本兼容。
关闭行为
现在您可以将 forceCloseChannel 设置为 true,以便在容器线程在 shutdownTimeout 秒内未响应关闭请求时,强制关闭通道,导致任何未确认的消息被重新入队。消息监听器容器配置 以获取更多信息。
JUnit@Rules
之前由框架内部使用的规则现已作为独立的 jar 包 spring-rabbit-junit 提供。
有关更多信息,请参见 JUnit4 @Rules。
连接命名策略
现在提供了一个新的 ConnectionNameStrategy,用于从 AbstractConnectionFactory 中填充针对目标 RabbitMQ 连接的应用程序特定标识信息。
有关更多信息,请参阅 连接与资源管理。
监听器容器变更
事务回滚行为
现在,您可以在事务回滚时配置消息重新入队,无论是否配置了事务管理器,结果都保持一致。有关已接收消息回滚的说明 以获取更多信息。
JUnit4@Rules
Spring AMQP 版本 1.7 及更高版本提供了一个额外的 JAR 文件,名为 spring-rabbit-junit。该 JAR 文件包含若干用于运行 JUnit4 测试时使用的实用 @Rule 实例。有关 JUnit5 测试,请参阅 JUnit5 条件。
使用BrokerRunning
BrokerRunning 提供了一种机制,使得在消息代理未运行时(默认情况下在 localhost 上)测试仍能通过。
它还提供了实用方法来初始化和清空队列,以及删除队列和交换机。
以下示例展示了其用法:
@ClassRule
public static BrokerRunning brokerRunning = BrokerRunning.isRunningWithEmptyQueues("foo", "bar");
@AfterClass
public static void tearDown() {
brokerRunning.removeTestQueues("some.other.queue.too"); // removes foo, bar as well
}
存在多个 isRunning… 静态方法,例如 isBrokerAndManagementRunning(),用于验证代理是否启用了管理插件。