2.2 自 2.1 以来的变更
本节描述 2.1 版本与 2.2 版本之间的变更。
包变更
以下类/接口已从 org.springframework.amqp.rabbit.core.support 移到 org.springframework.amqp.rabbit.batch:
BatchingStrategyMessageBatchSimpleBatchingStrategy
此外,ListenerExecutionFailedException 已从 org.springframework.amqp.rabbit.listener.exception 移到 org.springframework.amqp.rabbit.support。
依赖变更
JUnit (4) 现在是可选依赖,不再作为传递依赖出现。
spring-rabbit-junit 模块现在是 spring-rabbit-test 模块的编译依赖,以获得更好的目标应用开发体验——只需一个 spring-rabbit-test 即可获得 AMQP 组件的完整测试工具栈。
“破坏性” API 变更
JUnit (5) 的 RabbitAvailableCondition.getBrokerRunning() 现在返回 BrokerRunningSupport 实例,而不是依赖 JUnit 4 的 BrokerRunning。它具有相同的 API,因此只需更改任何引用处的类名。更多信息参见JUnit5 条件。
ListenerContainer 变更
默认情况下,带有致命异常的消息现在会被拒绝且不重新入队,即使确认模式为手动。更多信息参见异常处理。
现在可以使用 Micrometer Timer 监控 listener 性能。更多信息参见监控 Listener 性能。
@RabbitListener 变更
现在可以在每个 listener 上配置 executor,覆盖工厂配置,以便更容易识别与该 listener 关联的线程。现在可以用注解的 ackMode 属性覆盖容器工厂的 acknowledgeMode 属性。更多信息参见覆盖容器工厂属性。
使用批处理时,@RabbitListener 方法现在可以在一次调用中接收完整的一批消息,而不是逐条获取。
逐条接收批处理消息时,最后一条消息的 isLastInBatch 消息属性被设为 true。
此外,接收到的批处理消息现在包含 amqp_batchSize header。
Listener 也可以消费在 SimpleMessageListenerContainer 中创建的批次,即使该批次不是由 producer 创建的。更多信息参见选择容器。
Jackson2JsonMessageConverter 现在支持 Spring Data Projection 接口。更多信息参见使用 Spring Data Projection 接口。
如果没有 contentType 属性,或它是默认值(application/octet-string),Jackson2JsonMessageConverter 现在假定内容为 JSON。更多信息参见从消息转换。
类似地,如果没有 contentType 属性,或它是默认值(application/octet-string),Jackson2XmlMessageConverter 现在假定内容为 XML。更多信息参见Jackson2XmlMessageConverter。
当 @RabbitListener 方法返回结果时,bean 和 Method 现在在回复消息属性中可用。这允许配置 beforeSendReplyMessagePostProcessor,例如在回复中设置一个 header 以指示服务器上调用了哪个方法。更多信息参见回复管理。
现在可以配置 ReplyPostProcessor,以便在回复消息发送前对其进行修改。更多信息参见回复管理。
AMQP 日志 Appender 变更
Log4J 和 Logback 的 AmqpAppender 现在支持 verifyHostname SSL 选项。
此外,这些 appender 现在可以配置为不将 MDC 条目作为 header 添加。新增了 addMdcAsHeaders 布尔选项来配置这种行为。
这些 appender 现在支持 SaslConfig 属性。
更多信息参见日志子系统 AMQP Appender。
MessageListenerAdapter 变更
MessageListenerAdapter 现在提供新的 buildListenerArguments(Object, Channel, Message) 方法,用于构建传递给目标 listener 的参数数组,旧方法已废弃。更多信息参见MessageListenerAdapter。
Exchange/Queue 声明变更
用于创建供 RabbitAdmin 声明的 Exchange 和 Queue 对象的 ExchangeBuilder 和 QueueBuilder fluent API,现在支持“知名”参数。更多信息参见队列与 Exchange 的 Builder API。
RabbitAdmin 有一个新属性 explicitDeclarationsOnly。更多信息参见条件声明。
连接工厂变更
CachingConnectionFactory 有一个新属性 shuffleAddresses。提供 broker 节点地址列表时,在创建连接之前会打乱该列表,以便连接尝试的顺序是随机的。更多信息参见连接到集群。
使用 Publisher confirm 和 return 时,回调现在在连接工厂的 executor 上调用。如果你在回调内执行 Rabbit 操作,这可避免 amqp-clients 库中可能的死锁。更多信息参见关联的 Publisher Confirm 与 Return。
此外,publisher confirm 类型现在用 ConfirmType 枚举指定,而不是用两个互斥的 setter 方法。
启用 SSL 时,RabbitConnectionFactoryBean 现在默认使用 TLS 1.2。更多信息参见RabbitConnectionFactoryBean 与配置 SSL。
新的 MessagePostProcessor 类
新增了 DeflaterPostProcessor 和 InflaterPostProcessor 类,用于在消息 content-encoding 设为 deflate 时分别支持压缩和解压缩。
其他变更
Declarables 对象(用于声明多个队列、exchange、binding)现在为每种类型提供了过滤后的 getter。更多信息参见声明 Exchange、Queue 与 Binding 的集合。
现在可以在 RabbitAdmin 处理每个 Declarable Bean 的声明之前对其进行自定义。更多信息参见Exchange、Queue 与 Binding 的自动声明。
QueueBuilder 新增了 singleActiveConsumer(),用于设置 x-single-active-consumer 队列参数。更多信息参见队列与 Exchange 的 Builder API。
值类型为 Class<?> 的出站 header 现在使用 getName() 而非 toString() 进行映射。更多信息参见消息属性转换器。
现在支持恢复失败的、由 producer 创建的批次。更多信息参见批次监听器重试。