1.7 自 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 是否启用了管理插件。