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