跳到主要内容
版本:4.1.1

1.7 自 1.6 以来的变更

Doubao 中英对照 Changes in 1.7 Since 1.6

AMQP Client 库​

Spring AMQP 现在使用 RabbitMQ 团队提供的新版 4.0.x 版本 amqp-client 库。该客户端默认配置了自动恢复。参见RabbitMQ 自动连接/拓扑恢复。

备注

4.0.x 客户端默认启用自动恢复。虽然与该特性兼容,但 Spring AMQP 有自己的恢复机制,通常并不需要客户端的恢复特性。我们建议禁用 amqp-client 的自动恢复,以避免在 broker 可用但连接尚未恢复时出现 AutoRecoverConnectionNotCurrentlyOpenException。从 1.7.1 版本开始,除非你显式创建自己的 RabbitMQ 连接工厂并提供给 CachingConnectionFactory,否则 Spring AMQP 会禁用它。由 RabbitConnectionFactoryBean 创建的 RabbitMQ ConnectionFactory 实例默认也禁用了该选项。

Log4j 2 升级​

(AmqpAppender 的)最低 Log4j 2 版本现在为 2.7。框架不再兼容更早的版本。更多信息参见日志子系统 AMQP Appender。

Logback Appender​

该 appender 默认不再捕获调用者数据(方法、行号)。你可以通过设置 includeCallerData 配置选项来重新启用它。关于可用的日志 appender,参见日志子系统 AMQP Appender。

Spring Retry 升级​

最低 Spring Retry 版本现在为 1.2。框架不再兼容更早的版本。

关闭行为​

现在可以将 forceCloseChannel 设为 true,以便在容器线程未在 shutdownTimeout 内响应关闭时,强制关闭 channel,从而使所有未确认消息重新入队。更多信息参见消息 Listener 容器配置。

FasterXML Jackson 升级​

最低 Jackson 版本现在为 2.8。框架不再兼容更早的版本。

JUnit @Rules​

此前框架内部使用的 Rules,现在已在一个名为 spring-rabbit-junit 的独立 jar 中提供。更多信息参见JUnit4 @Rules。

容器条件回滚​

当使用外部事务管理器(例如 JDBC)时,现在在为容器提供事务属性的情况下支持基于规则的回滚。使用事务通知时也更加灵活。

连接命名策略​

现在提供新的 ConnectionNameStrategy,用于从 AbstractConnectionFactory 填充目标 RabbitMQ 连接的应用特定标识。更多信息参见连接与资源管理。

Listener 容器变更​

事务回滚行为​

现在可以配置事务回滚时的消息重新入队,使其保持一致,而无论是否配置了事务管理器。更多信息参见关于已接收消息回滚的说明。

JUnit4 @Rules​

Spring AMQP 1.7 及更高版本提供了一个名为 spring-rabbit-junit 的额外 jar。该 jar 包含一些实用的 @Rule 实例,用于运行 JUnit4 测试。JUnit5 测试参见JUnit5 条件。

使用 BrokerRunning​

BrokerRunning 提供一种机制,让测试在 broker 未运行(默认在 localhost)时也能通过。

它还有一些实用方法,用于初始化和清空队列,以及删除队列和 exchange。

以下示例展示其用法:

@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(),它会验证 broker 是否启用了管理插件。