附录 A:变更历史
本节介绍在版本更改时进行了哪些更改。
A.1. 当前版本
请参阅新增功能。
A.2. 以前的版本
A.2.1. 自 2.2 以来 2.3 中的更改
本节介绍版本 2.2 和版本 2.3 之间的更改。 有关以前版本中的更改,请参阅更改历史记录。
连接工厂更改
现在提供了两个额外的连接工厂。 有关更多信息,请参阅选择连接工厂。
@RabbitListener
变化
您现在可以指定回复内容类型。 有关更多信息,请参阅 Reply ContentType 。
消息转换器更改
如果配置了自定义反序列化器,则 s 现在可以反序列化抽象类 (包括接口) 。
有关更多信息,请参见Deserializing Abstract Classes。Jackson2JMessageConverter
ObjectMapper
测试更改
提供了一个新的注释,用于在您不使用时自动配置一些基础结构 bean。
有关更多信息,请参阅 @SpringRabbitTest。@SpringRabbitTest
SpringBootTest
RabbitTemplate 更改
模板已重构,以便在 lambda 表达式中使用得更简单。
有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。ReturnCallback
ReturnsCallback
当使用 returns 和 correlated confirmed 时,现在需要一个唯一的属性。
有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。CorrelationData
id
使用直接回复时,您现在可以配置模板,以便服务器不需要在回复中返回关联数据。 有关更多信息,请参阅 RabbitMQ Direct 回复。
侦听器容器更改
现在提供了新的侦听器容器属性;在使用 RabbitMQ Sharding Plugin 时非常有用。consumeDelay
默认值现在调用 .
要恢复到之前的行为(不执行任何操作),请添加 no-op 处理程序。JavaLangErrorHandler
System.exit(99)
容器现在支持将 global 应用于通道而不是通道上的每个使用者的属性。globalQos
prefetchCount
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。
MessagePostProcessor 更改
压缩 s 现在使用逗号而不是冒号来分隔多个内容编码。
解压缩器可以处理这两种格式,但是,如果您使用此版本生成的消息被 2.2.12 之前的版本使用,则应将压缩器配置为使用旧的分隔符。
有关更多信息,请参阅修改消息 - 压缩等中的重要说明。MessagePostProcessor
多个 Broker 支持改进
有关更多信息,请参阅多个代理(或集群)支持。
RepublishMessageRecoverer 更改
未提供支持 publisher 确认的此 recoverer 的新子类。 有关更多信息,请参见 Message Listeners and the Asynchronous Case。
A.2.2. 自 2.1 以来 2.2 中的更改
本节介绍版本 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) 现在是可选依赖项,将不再显示为传递依赖项。
该模块现在是模块中的编译依赖项,以获得更好的目标应用程序开发体验,而我们只使用一个模块即可获得 AMQP 组件的完整测试实用程序堆栈。spring-rabbit-junit
spring-rabbit-test
spring-rabbit-test
“Breaking” API 更改
JUnit (5) 现在返回一个实例,而不是 ,它依赖于 JUnit 4。
它具有相同的 API,因此只需更改任何引用的类名即可。
有关更多信息,请参阅 JUnit5 条件。RabbitAvailableCondition.getBrokerRunning()
BrokerRunningSupport
BrokerRunning
ListenerContainer 更改
默认情况下,具有致命异常的消息现在会被拒绝并且不会重新排队,即使确认模式是手动的。 有关更多信息,请参阅异常处理。
现在可以使用 Micrometer s 监控侦听器性能。
有关更多信息,请参阅监控侦听器性能。Timer
@RabbitListener 更改
现在,您可以在每个侦听器上配置 一个,覆盖出厂配置,以便更轻松地识别与侦听器关联的线程。
现在,您可以使用注解的属性覆盖容器工厂的属性。
有关更多信息,请参阅覆盖 Container Factory 属性。executor
acknowledgeMode
ackMode
使用批处理时,方法现在可以在一次调用中接收完整的消息批次,而不是一次获取一条消息。@RabbitListener
当一次接收一条批量消息时,最后一条消息的 message 属性设置为 true。isLastInBatch
此外,收到的批处理消息现在包含标头。amqp_batchSize
侦听器还可以使用在 中创建的批处理,即使该批处理不是由创建者创建的。
有关更多信息,请参阅选择容器。SimpleMessageListenerContainer
Spring Data Projection 接口现在受 .
有关更多信息,请参见使用 Spring Data Projection 接口。Jackson2JsonMessageConverter
现在,如果没有属性,则假定内容为 JSON,或者它是默认 () 。
有关更多信息,请参阅从 Message
转换。Jackson2JsonMessageConverter
contentType
application/octet-string
同样地。现在假定内容为 XML(如果没有属性),或者它是默认的 ()。
有关更多信息,请参见Jackson2XmlMessageConverter
。Jackson2XmlMessageConverter
contentType
application/octet-string
当方法返回结果时,bean 和 现在在回复消息属性中可用。
这允许配置 a,例如,在回复中设置一个 Headers 以指示在服务器上调用了哪个方法。
有关更多信息,请参阅回复管理。@RabbitListener
Method
beforeSendReplyMessagePostProcessor
现在,您可以配置 在发送回复消息之前对其进行修改。
有关更多信息,请参阅回复管理。ReplyPostProcessor
AMQP 日志记录附加程序更改
Log4J 和 Logback 现在支持 SSL 选项。AmqpAppender
verifyHostname
此外,这些 appender 现在可以配置为不将 MDC 条目添加为 headers。
引入了 boolean 选项来配置此类行为。addMdcAsHeaders
appender 现在支持该属性。SaslConfig
有关更多信息,请参见Logging Subsystem AMQP Appenders。
MessageListenerAdapter 更改
现在,它提供了一种新方法来构建要传递到目标侦听器的参数数组,而旧方法已弃用。
有关更多信息,请参见MessageListenerAdapter
。MessageListenerAdapter
buildListenerArguments(Object, Channel, Message)
Exchange/Queue 声明更改
用于创建 and objects for declaration 的 and Fluent API 现在支持“众所周知”的参数。
有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder API。ExchangeBuilder
QueueBuilder
Exchange
Queue
RabbitAdmin
具有新属性 .
有关更多信息,请参阅 条件声明 。RabbitAdmin
explicitDeclarationsOnly
连接工厂更改
具有新属性 .
在提供代理节点地址列表时,该列表将在创建连接之前随机排列,以便尝试连接的顺序是随机的。
有关更多信息,请参阅连接到集群。CachingConnectionFactory
shuffleAddresses
现在,当使用 Publisher 确认并返回时,将在连接工厂的 .
这可避免在回调中执行 rabbit 操作时可能出现的库死锁。
有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。executor
amqp-clients
此外,现在使用 enum 而不是两个互斥的 setter 方法指定发布者确认类型。ConfirmType
现在,启用 SSL 时,默认使用 TLS 1.2。
有关更多信息,请参见RabbitConnectionFactoryBean
和配置 SSL。RabbitConnectionFactoryBean
新的 MessagePostProcessor 类
类 和 分别用于支持压缩和解压缩 消息 content-encoding 设置为 .DeflaterPostProcessor
InflaterPostProcessor
deflate
其他更改
该对象(用于声明多个队列、交换、绑定)现在具有每种类型的过滤 getter。
有关更多信息,请参见Declaring Collections of Exchanges, Queues, and Bindings。Declarables
现在,您可以在处理其声明之前自定义每个 bean。
有关更多信息,请参见 Automatic Declaration of Exchanges, Queues, and Bindings 。Declarable
RabbitAdmin
singleActiveConsumer()
已添加到 to set the queue 参数中。
有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder API。QueueBuilder
x-single-active-consumer
具有 type 值的出站标头现在使用 instead of .
有关更多信息,请参阅 消息属性转换器 。Class<?>
getName()
toString()
现在支持恢复失败的创建者创建的批处理。 有关更多信息,请参阅使用 Batch 侦听器重试。
A.2.3. 自 2.0 以来 2.1 中的更改
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的库的 5.4.x 版本。
默认情况下,此客户端配置了自动恢复。
请参阅 RabbitMQ 自动连接/拓扑恢复。amqp-client
从版本 4.0 开始,客户端默认启用自动恢复。
虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。
我们建议禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。
从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给.
默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-client AutoRecoverConnectionNotCurrentlyOpenException CachingConnectionFactory ConnectionFactory RabbitConnectionFactoryBean |
套件更改
某些类已移至不同的包。
大多数是内部类,不会影响用户应用程序。
两个例外是 和 。
这些接口现在位于 .ChannelAwareMessageListener
RabbitListenerErrorHandler
org.springframework.amqp.rabbit.listener.api
发布者确认更改
当存在未完成的确认时,启用了发布者确认的通道不会返回到缓存中。 有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。
Listener Container Factory 改进
现在,您可以使用侦听器容器工厂创建任何侦听器容器,而不仅仅是那些用于注释或 .
有关更多信息,请参阅使用容器工厂。@RabbitListener
@RabbitListenerEndpointRegistry
ChannelAwareMessageListener
现在继承自 。MessageListener
Broker 事件侦听器
引入了 A 以将选定的代理事件发布为实例。
有关更多信息,请参阅 Broker Event Listener。BrokerEventListener
ApplicationEvent
RabbitAdmin 更改
发现 bean 类型的 bean(它是 - 、 和 对象的容器)并在代理上声明包含的对象。
不鼓励用户使用旧的声明机制(和其他机制),而应该改用 bean。
默认情况下,旧机制处于禁用状态。
有关更多信息,请参见Declaring Collections of Exchanges, Queues, and Bindings。RabbitAdmin
Declarables
Declarable
Queue
Exchange
Binding
<Collection<Queue>>
Declarables
AnonymousQueue
现在,默认情况下,实例声明为 Set to,以确保在应用程序连接到的节点上创建队列。
有关更多信息,请参阅 配置 Broker。x-queue-master-locator
client-local
RabbitTemplate 更改
现在,您可以使用选项配置 ,以控制操作中回复使用者的标志。
有关更多信息,请参阅请求/回复消息。RabbitTemplate
noLocalReplyConsumer
noLocal
sendAndReceive()
CorrelationData
对于发布者确认,现在有一个 ,您可以使用它来获取确认,而不是使用回调。
启用返回和确认后,关联数据(如果提供)将填充返回的消息。
有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。ListenableFuture
现在提供了一个 called 的方法来通知 subclasses 回复已超时,从而允许任何状态清理。
有关更多信息,请参阅 Reply Timeout (回复超时)。replyTimedOut
现在,您可以指定在将 request/reply 与 a(默认)一起使用时,在传递回复时发生异常(例如,延迟回复)时调用。
请参阅 上的 。
(也是从 2.0.11 开始)。ErrorHandler
DirectReplyToMessageListenerContainer
setReplyErrorHandler
RabbitTemplate
消息转换
我们引入了一个新功能,以支持将消息从 XML 格式转换为 XML 格式。
有关更多信息,请参见Jackson2XmlMessageConverter
。Jackson2XmlMessageConverter
管理 REST API
现在已弃用,取而代之的是直接 (或 ) 用法。
有关更多信息,请参阅 RabbitMQ REST API。RabbitManagementTemplate
com.rabbitmq.http.client.Client
com.rabbitmq.http.client.ReactorNettyClient
@RabbitListener
变化
侦听器容器工厂现在可以配置发送回复时使用的 and(可选)。
有关更多信息,请参阅启用侦听器终端节点注释。RetryTemplate
RecoveryCallback
异步返回@RabbitListener
@RabbitListener
方法现在可以返回 或 .
有关更多信息,请参阅 异步 @RabbitListener
返回类型。ListenableFuture<?>
Mono<?>
连接工厂 Bean 更改
默认情况下,now 调用 .
要恢复到之前的行为,请将该属性设置为 。RabbitConnectionFactoryBean
enableHostnameVerification()
enableHostnameVerification
false
连接工厂更改
现在无条件地禁用底层 RabbitMQ 中的自动恢复,即使在构造函数中提供了预配置的实例。
虽然已经采取了步骤使 Spring AMQP 与自动恢复兼容,但出现了某些极端情况,问题仍然存在。
Spring AMQP 从 1.0.0 开始就有了自己的恢复机制,不需要使用 Client 端提供的恢复。
虽然在构建 后仍可以启用该功能 (使用 ),但我们强烈建议您不要这样做。
如果您在直接使用 client 工厂时需要自动恢复连接(而不是使用 Spring AMQP 组件),我们建议您使用单独的 RabbitMQ。CachingConnectionFactory
ConnectionFactory
cachingConnectionFactory.getRabbitConnectionFactory()
.setAutomaticRecoveryEnabled()
CachingConnectionFactory
ConnectionFactory
侦听器容器更改
现在,默认值会完全丢弃在存在标头时导致致命错误的消息。
有关更多信息,请参阅异常处理。ConditionalRejectingErrorHandler
x-death
立即重新排队
引入了一个 new 来通知侦听器容器消息必须重新排队。
要使用此功能,需要添加新的实现。ImmediateRequeueAmqpException
ImmediateRequeueMessageRecoverer
有关更多信息,请参见 Message Listeners and the Asynchronous Case。
A.2.4. 2.0 自 1.7 以来的变化
用CachingConnectionFactory
从版本 2.0.2 开始,您可以将 配置为使用与侦听器容器使用的连接不同的连接。
此更改可避免在生产者因任何原因被阻止时出现使用者死锁。
有关更多信息,请参阅使用单独的连接。RabbitTemplate
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的库的新 5.0.x 版本。
默认情况下,此客户端配置了自动恢复。
请参阅 RabbitMQ 自动连接/拓扑恢复。amqp-client
从版本 4.0 开始,客户端默认启用自动恢复。
虽然与此功能兼容, Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。
我们建议您禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。
从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给.
默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-client AutoRecoverConnectionNotCurrentlyOpenException CachingConnectionFactory ConnectionFactory RabbitConnectionFactoryBean |
一般更改
现在,默认情况下,它会构建持久交换。
默认情况下,a 中使用的注释还声明 durable exchanges。
默认情况下,在 a 中使用的注释如果已命名,则声明持久队列,如果匿名,则声明非持久队列。
有关更多信息,请参阅适用于队列和交换的 Builder API 和 注释驱动的侦听器终端节点。ExchangeBuilder
@Exchange
@QeueueBinding
@Queue
@RabbitListener
已删除的类
UniquelyNameQueue
不再提供。
创建具有唯一名称的持久非自动删除队列是不常见的。
此类已被删除。
如果需要其功能,请使用 .new Queue(UUID.randomUUID().toString())
新建侦听器容器
已与现有的 .
有关选择要使用的容器以及如何配置它们的信息,请参阅选择容器和 Message Listener 容器配置。DirectMessageListenerContainer
SimpleMessageListenerContainer
Log4j 附加程序
由于 log4j 的生命周期结束,此 appender 不再可用。 有关可用日志附加程序的信息,请参见Logging Subsystem AMQP Appenders。
RabbitTemplate
变化
以前,如果非事务性事务性在事务性侦听器容器线程上运行,则它参与现有事务。
这是一个严重的错误。
但是,用户可能依赖于此行为。
从版本 1.6.2 开始,您必须在模板上设置布尔值,使其参与容器事务。RabbitTemplate channelTransacted |
现在使用 a(默认情况下),而不是为每个请求创建新的使用者。
有关更多信息,请参阅 RabbitMQ Direct 回复。RabbitTemplate
DirectReplyToMessageListenerContainer
现在支持直接回复。
有关更多信息,请参阅 Async Rabbit Template 。AsyncRabbitTemplate
现在有 和 方法,这些方法采用参数,让调用方指定要将结果转换为的类型。
这对于复杂类型或当类型信息未在消息头中传达时特别有用。
它需要 .
有关更多信息,请参见接收消息、请求/回复消息、异步 Rabbit 模板和使用 RabbitTemplate
从消息
转换。RabbitTemplate
AsyncRabbitTemplate
receiveAndConvert
convertSendAndReceiveAsType
ParameterizedTypeReference<T>
SmartMessageConverter
Jackson2JsonMessageConverter
现在,您可以使用 a 在专用通道上执行多项操作。
有关更多信息,请参阅 Scoped Operations 。RabbitTemplate
侦听器适配器
可以方便地将 lambda 与 .
有关更多信息,请参见MessageListenerAdapter
。FunctionalInterface
MessageListenerAdapter
侦听器容器更改
预取默认值
prefetch 默认值以前为 1,这可能导致高效消费者的利用率不足。 默认预取值现在是 250,在大多数常见情况下,这应该会让使用者忙碌起来,并且, 因此,可以提高吞吐量。
在某些情况下,prefetch 值应 低 — 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会累积 添加到客户端进程中的大量内存),并且如果需要严格的消息排序 (在这种情况下,prefetch 值应设置回 1)。 此外,对于低容量消息收发和多个使用者(包括单个侦听器容器实例中的并发),您可能希望减少预取,以便在使用者之间更均匀地分配消息。 |
有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中的使用者利用率的博文和这篇关于排队理论的博文。
消息计数
以前,为容器发出的消息返回。
此属性仅在您使用(例如,from methods)时适用,并且现在已初始化为容器消息。MessageProperties.getMessageCount()
0
basicGet
RabbitTemplate.receive()
null
事务回滚行为
事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关更多信息,请参阅 回滚已接收消息的说明 。
关闭行为
如果容器线程不响应 Shutdown 内,则默认情况下会强制关闭通道。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。shutdownTimeout
连接工厂更改
connection 和 channel listener 接口现在提供了一种获取有关异常信息的机制。 有关更多信息,请参阅连接和通道侦听器和发布是异步的 — 如何检测成功和失败。
现在提供了一个 new 版本,用于填充来自 .
有关更多信息,请参阅连接和资源管理。ConnectionNameStrategy
AbstractConnectionFactory
重试更改
不再提供。
它的功能现在是内置的。
有关更多信息,请参阅同步操作失败和重试选项。MissingMessageIdAdvice
匿名队列命名
默认情况下,现在使用 default 而不是简单字符串命名。
有关更多信息,请参阅 AnonymousQueue
。AnonymousQueues
Base64UrlNamingStrategy
UUID
@RabbitListener
变化
现在,您可以在 annotations 中提供简单的队列声明(仅绑定到默认 exchange)。
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。@RabbitListener
您现在可以配置注释,以便将任何异常返回给发件人。
您还可以配置 来处理异常。
有关更多信息,请参阅处理异常。@RabbitListener
RabbitListenerErrorHandler
现在,您可以在使用注释时将队列与多个路由键绑定。
现在还支持自定义交换类型,并默认声明持久交换。@QueueBinding
@QueueBinding.exchange()
现在,您可以在注释级别设置侦听器容器的 ,而不必为不同的并发设置配置不同的容器工厂。concurrency
现在,您可以在 Comments 级别设置侦听器容器的属性,从而覆盖容器工厂中的默认设置。autoStartup
现在,您可以在容器工厂中设置 after receive 和 before send (reply) 实例。MessagePostProcessor
RabbitListener
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。
从版本 2.0.3 开始,可以将类级别的 Comments 之一指定为 default。
有关更多信息,请参阅 Multi-method Listeners 。@RabbitHandler
@RabbitListener
容器条件回滚
当使用外部事务管理器(例如 JDBC)时,当您为容器提供事务属性时,现在支持基于规则的回滚。 现在,当您使用交易通知时,它也更加灵活。 有关更多信息,请参阅条件回滚。
删除 Jackson 1.x 支持
Jackson 转换器和相关组件在以前的版本中已弃用,现在已被删除。
您可以使用基于 Jackson 2.x 的类似组件。
有关更多信息,请参见Jackson2JsonMessageConverter。1.x
JSON 消息转换器
当 the 设置为入站 JSON 消息时,默认转换类型现在为 。
以前,它是 .
要恢复到 ,您可以在 .TypeId
Hashtable
LinkedHashMap
Hashtable
Hashtable
setDefaultMapType
DefaultClassMapper
XML 解析器
在解析 XML 组件时,如果存在属性,解析器不再将属性值注册为 Bean 别名。
有关更多信息,请参阅有关 id
和 name
属性的说明。Queue
Exchange
name
id
阻止的连接
您现在可以将 注入到对象中。
此外,当 Broker 阻止或取消阻止连接时,会发出 和 事件。com.rabbitmq.client.BlockedListener
org.springframework.amqp.rabbit.connection.Connection
ConnectionBlockedEvent
ConnectionUnblockedEvent
ConnectionFactory
有关更多信息,请参阅连接和资源管理。
A.2.5. 1.7 自 1.6 以来的变化
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的库的新 4.0.x 版本。
默认情况下,此客户端配置了自动恢复。
请参阅 RabbitMQ 自动连接/拓扑恢复。amqp-client
默认情况下,4.0.x 客户端启用自动恢复。
虽然与此功能兼容, Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。
我们建议禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。
从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给.
默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-client AutoRecoverConnectionNotCurrentlyOpenException CachingConnectionFactory ConnectionFactory RabbitConnectionFactoryBean |
Log4j 2 升级
最低 Log4j 2 版本(适用于 )现在是 。
该框架不再与以前的版本兼容。
有关更多信息,请参见Logging Subsystem AMQP Appenders。AmqpAppender
2.7
Logback Appender
默认情况下,此 appender 不再捕获调用者数据(方法、行号)。
您可以通过设置配置选项来重新启用它。
有关可用日志附加程序的信息,请参见Logging Subsystem AMQP Appenders。includeCallerData
Spring 重试升级
最低 Spring Retry 版本现在是。
该框架不再与以前的版本兼容。1.2
关闭行为
您现在可以设置为 ,如果容器线程没有响应 内的关闭,则强制关闭通道,
导致任何未确认的消息重新排队。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。forceCloseChannel
true
shutdownTimeout
JUnit@Rules
以前由框架内部使用的规则现在已在名为 .
有关更多信息,请参阅 JUnit4 @Rules
。spring-rabbit-junit
连接命名策略
现在提供了一个 new 版本,用于填充来自 .
有关更多信息,请参阅连接和资源管理。ConnectionNameStrategy
AbstractConnectionFactory
侦听器容器更改
事务回滚行为
现在,您可以将事务回滚时的消息重新排队配置为一致,无论是否配置了事务管理器。 有关更多信息,请参阅 回滚已接收消息的说明 。
A.2.6. 早期版本
请参阅 以前的版本 以了解以前版本中的更改。
A.2.7. 1.6 自 1.5 以来的变化
测试支持
现在提供了新的测试支持库。 有关更多信息,请参阅测试支持。
架构工人
提供用于配置和对象的 Fluent API 的生成器现已推出。
有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder API。Queue
Exchange
命名空间更改
连接工厂
现在,你可以将 a 添加到连接工厂 bean 声明中——例如,命名线程
由库创建。
有关更多信息,请参阅连接和资源管理。thread-factory
amqp-client
使用 时,您现在可以限制允许的连接总数。
有关更多信息,请参阅连接和资源管理。CacheMode.CONNECTION
队列定义
您现在可以为匿名队列提供命名策略。
有关更多信息,请参阅 AnonymousQueue
。
侦听器容器更改
空闲消息侦听器检测
您现在可以将侦听器容器配置为在空闲时发布实例。
有关更多信息,请参阅 Detecting Idle Asynchronous Consumer。ApplicationEvent
不匹配队列检测
默认情况下,当侦听器容器启动时,如果检测到属性或参数不匹配的队列,
容器会记录异常,但会继续侦听。
容器现在具有一个名为 的属性,该属性可防止容器(和上下文)无法
如果在启动过程中检测到问题,则启动 Starting。
如果稍后检测到问题,例如从连接故障中恢复后,它还会停止容器。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。mismatchedQueuesFatal
默认错误处理程序
默认错误处理程序 () 现在将不可恢复的异常视为致命异常。
有关更多信息,请参阅异常处理。ConditionalRejectingErrorHandler
@RabbitListener
AutoDeclare
和 InstancesRabbitAdmin
有关该选项的语义的一些更改,请参见 Message Listener Container Configuration ()
的实例。autoDeclare
RabbitAdmin
AmqpTemplate
:超时接收
已经为 及其实现引入了许多新方法。
有关更多信息,请参阅轮询使用者。receive()
timeout
AmqpTemplate
RabbitTemplate
用AsyncRabbitTemplate
引入了一个新的。
此模板提供了许多 send 和 receive 方法,其中返回值为 a ,它可以
稍后用于同步或异步获取结果。
有关更多信息,请参阅 Async Rabbit Template 。AsyncRabbitTemplate
ListenableFuture
RabbitTemplate
变化
1.4.1 引入了在 broker 支持时使用 Direct reply-to 的功能。
这比对每个回复使用临时队列更有效。
此版本允许您通过将属性设置为 来覆盖此默认行为并使用临时队列。
有关更多信息,请参阅 RabbitMQ Direct 回复。useTemporaryReplyQueues
true
现在支持 ( when using Java configuration).
有关更多信息,请参阅经过验证的 User-ID RabbitMQ 文档和经过验证的用户 ID。RabbitTemplate
user-id-expression
userIdExpression
消息属性
用CorrelationId
message 属性现在可以是 .
有关更多信息,请参阅 消息属性转换器 。correlationId
String
长字符串标头
以前,“转换后的”标头长度超过长字符串限制(默认为 1024)
到 a 中(实际上,它引用了实例的 )。
在输出时,此标头未被转换(除了转换为 String — 例如,通过调用流)。DefaultMessagePropertiesConverter
DataInputStream
LongString
DataInputStream
java.io.DataInputStream@1d057a39
toString()
在此版本中,长实例现在默认保留为实例。
您可以使用 、 或 方法访问内容。
现在,大量传入也可以在输出上正确 “转换” 。LongString
LongString
getBytes[]
toString()
getStream()
LongString
有关更多信息,请参阅 消息属性转换器 。
入站配送模式
该属性不再映射到 .
如果使用相同的对象发送出站消息,则此更改可避免意外传播。
相反,入站标头映射到 .deliveryMode
MessageProperties.deliveryMode
MessageProperties
deliveryMode
MessageProperties.receivedDeliveryMode
有关更多信息,请参阅 消息属性转换器 。
使用带注释的端点时,标头在名为 .AmqpHeaders.RECEIVED_DELIVERY_MODE
有关更多信息,请参阅带注释的端点方法签名。
入站用户 ID
该属性不再映射到 .
如果使用相同的对象发送出站消息,则此更改可避免意外传播。
相反,入站标头映射到 .user_id
MessageProperties.userId
MessageProperties
userId
MessageProperties.receivedUserId
有关更多信息,请参阅 消息属性转换器 。
使用带注释的端点时,标头在名为 .AmqpHeaders.RECEIVED_USER_ID
有关更多信息,请参阅带注释的端点方法签名。
RabbitAdmin
变化
声明失败
以前,该标志仅对频道上生效(如 mis-matched
参数)。
它现在对任何异常(如 )生效。
此外,现在每当声明失败时都会发布 a。
最后一个声明事件也可用作 property 。
有关更多信息,请参阅 配置 Broker。ignoreDeclarationFailures
IOException
TimeoutException
DeclarationExceptionEvent
RabbitAdmin
lastDeclarationExceptionEvent
@RabbitListener
变化
每个 bean 的多个容器
当您使用 Java 8 或更高版本时,您现在可以向类添加多个注释,或者
他们的方法。
使用 Java 7 或更早版本时,您可以使用 container 注解来提供相同的
功能性。
有关更多信息,请参阅 @Repeatable
@RabbitListener
。@RabbitListener
@Bean
@RabbitListeners
@SendTo
SPEL 表达式
@SendTo
对于没有属性的路由回复,现在可以根据
请求/回复。
有关更多信息,请参阅回复管理。replyTo
@QueueBinding
改进
现在,您可以在注释中为 queues、exchanges 和 bindings 指定参数。
标头交换现在由 .
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。@QueueBinding
@QueueBinding
延迟消息交换
Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件具有一流的支持。 有关更多信息,请参阅 Delayed Message Exchange。
Exchange 内部标志
现在,任何定义都可以标记为 ,并在
声明交易所。
有关更多信息,请参阅 配置 Broker。Exchange
internal
RabbitAdmin
CachingConnectionFactory
变化
CachingConnectionFactory
缓存统计
现在,在运行时和 JMX 上提供缓存属性。
有关更多信息,请参阅 Runtime Cache Properties (运行时缓存属性)。CachingConnectionFactory
访问底层 RabbitMQ 连接工厂
添加了一个新的 getter 以提供对底层工厂的访问。 例如,您可以使用此 getter 来添加自定义连接属性。 有关更多信息,请参阅添加自定义客户端连接属性。
Channel Cache
默认通道缓存大小已从 1 增加到 25。 有关更多信息,请参阅连接和资源管理。
此外,不再将缓存大小调整为至少与数字
of — 这是多余的,因为容器使用者通道永远不会被缓存。SimpleMessageListenerContainer
concurrentConsumers
Java 反序列化
现在,您可以在使用 Java 反序列化时配置允许类的“允许列表”。 如果您接受包含来自 untrusted sources 的 untrusted sources。 有关更多信息,请参阅 Java 反序列化。
JSON 格式MessageConverter
对 JSON 消息转换器的改进现在允许使用没有类型信息的消息 在消息标头中。 有关更多信息,请参见带注释方法的消息转换和 Jackson2JsonMessageConverter。
A.2.8. 1.5 自 1.4 以来的变化
spring-erlang
不再受支持
该 jar 不再包含在分发中。
请改用 RabbitMQ REST API。spring-erlang
CachingConnectionFactory
变化
用于控制容器队列声明行为的属性
当侦听器容器使用者启动时,他们尝试被动声明队列以确保它们可用
在经纪人上。
以前,如果这些声明失败(例如,因为队列不存在)或当 HA 队列
移动时,重试逻辑固定为每隔 5 秒进行三次重试尝试。
如果队列仍然存在,则行为由属性 (default: ) 控制。
此外,对于配置为从多个队列侦听的容器,如果只有一个队列子集可用,则使用者
以 60 秒的固定间隔重试缺少的队列。missingQueuesFatal
true
的 、 和 属性现在是可配置的。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。declarationRetries
failedDeclarationRetryInterval
retryDeclarationInterval
DefaultMessagePropertiesConverter
变化
您现在可以将
确定已转换的 A 的最大长度
到 a 而不是 a 。
转换器具有将该值作为限制的替代构造函数。
以前,此限制是硬编码为 bytes。
(在 1.4.4 中也可用)。DefaultMessagePropertiesConverter
LongString
String
DataInputStream
1024
@RabbitListener
改进
自动交换、排队和绑定声明
您现在可以声明定义这些实体集合的 bean,并且添加了
contents 添加到它在建立连接时声明的实体列表中。
有关更多信息,请参见Declaring Collections of Exchanges, Queues, and Bindings。RabbitAdmin
RabbitTemplate
变化
reply-address
添加
该属性已作为替代 添加到组件中。
有关更多信息,请参阅请求/回复消息。
(在 1.4.4 中也作为 ) 上的 setter 提供。reply-address
<rabbit-template>
reply-queue
RabbitTemplate
阻塞方法receive
现在支持 blocking in 和 methods.
有关更多信息,请参阅轮询使用者。RabbitTemplate
receive
convertAndReceive
对于 Methods 是必需的sendAndReceive
如果在使用 和 方法时设置了标志,则调用线程
如果无法传递请求消息,则引发 an。
有关更多信息,请参阅 Reply Timeout (回复超时)。mandatory
sendAndReceive
convertSendAndReceive
AmqpMessageReturnedException
RabbitManagementTemplate
添加
引入了 RabbitMQ Broker 以使用其管理插件提供的 REST API 来监控和配置 RabbitMQ Broker。
有关更多信息,请参阅 RabbitMQ REST API。RabbitManagementTemplate
侦听器容器 Bean 名称 (XML)
元素上的属性已被删除。
从此版本开始,将单独使用 on the child 元素来命名为每个侦听器元素创建的侦听器容器 Bean。 应用正常的 Spring bean 名称覆盖。
如果以后使用与现有 Bean 相同的 bean 进行解析,则新定义将覆盖现有 Bean。
以前,bean 名称由 和 元素的属性组成。 迁移到此版本时,如果您的元素上有属性,请删除这些属性,然后改为在子元素上设置 。 |
但是,为了支持以组的形式启动和停止容器,添加了一个新属性。
定义此属性后,此元素创建的容器将添加到具有此名称的 bean(类型为 )中。
您可以迭代此组以启动和停止容器。group
Collection<SimpleMessageListenerContainer>
类级别@RabbitListener
现在可以在类级别应用注释。
与新的方法注释一起,这允许您根据有效负载类型选择处理程序方法。
有关更多信息,请参阅 Multi-method Listeners 。@RabbitListener
@RabbitHandler
SimpleMessageListenerContainer
: BackOff 支持
现在可以为 提供用于启动恢复的实例。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。SimpleMessageListenerContainer
BackOff
consumer
通道关闭日志记录
引入了一种控制 channel closure 的对数级别的机制。 请参见记录通道关闭事件。
应用程序事件
现在,当使用者发生故障时,它会发出应用程序事件。
有关更多信息,请参阅使用者事件。SimpleMessageListenerContainer
Consumer 标签配置
以前,异步使用者的使用者标签是由 Broker 生成的。 在此版本中,现在可以为侦听器容器提供命名策略。 请参阅 Consumer Tags。
匿名队列命名
从版本 1.5.3 开始,您现在可以控制名称的生成方式。
有关更多信息,请参阅 AnonymousQueue
。AnonymousQueue
A.2.9. 自 1.3 以来 1.4 中的更改
@RabbitListener
注解
POJO 侦听器可以用 、 enabled by 或 进行注释。
此功能需要 Spring Framework 4.1。
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。@RabbitListener
@EnableRabbit
<rabbit:annotation-driven />
RabbitMessagingTemplate
添加
new 允许您使用实例与 RabbitMQ 交互。
在内部,它使用 ,您可以正常配置。
此功能需要 Spring Framework 4.1。
有关更多信息,请参阅消息收发集成。RabbitMessagingTemplate
spring-messaging
Message
RabbitTemplate
侦听器容器属性missingQueuesFatal
1.3.5 在 上引入了 属性。
现在,这在侦听器容器命名空间元素上可用。
请参阅 消息侦听器容器配置。missingQueuesFatal
SimpleMessageListenerContainer
RabbitTemplate 接口ConfirmCallback
此接口上的方法有一个名为 .
如果可用,此参数包含否定确认 (nack) 的原因。
请参阅 相关发布者确认和返回。confirm
cause
RabbitConnectionFactoryBean
添加
RabbitConnectionFactoryBean
创建由 .
这允许使用 Spring 的依赖项注入配置 SSL 选项。
请参阅配置底层客户端连接工厂。ConnectionFactory
CachingConnectionFactory
用CachingConnectionFactory
现在允许将 设置为 命名空间中的属性或属性。
它在底层 RabbitMQ 上设置属性。
请参阅配置底层客户端连接工厂。CachingConnectionFactory
connectionTimeout
ConnectionFactory
Log Appender
引入了 Logback。
它提供类似于 的选项。
有关更多信息,请参阅这些类的 JavaDoc。org.springframework.amqp.rabbit.logback.AmqpAppender
org.springframework.amqp.rabbit.log4j.AmqpAppender
Log4j 现在支持属性 ( or , default: )。
以前,所有 log4j 消息都是 .AmqpAppender
deliveryMode
PERSISTENT
NON_PERSISTENT
PERSISTENT
PERSISTENT
appender 还支持修改 before sending —— 例如,允许添加自定义 Headers。
子类应覆盖 .Message
postProcessMessageBeforeSend()
侦听器队列
现在,默认情况下,侦听器容器会在启动期间重新声明任何缺失的队列。
已向 添加了一个新属性,以防止这些重新声明。
请参阅 auto-delete
Queues。auto-declare
<rabbit:listener-container>
RabbitTemplate
: 和表达式mandatory
connectionFactorySelector
的 、 和 SPEL 表达式的属性已添加到 。
这用于在使用 a 时根据每条请求消息评估布尔值。
请参阅 相关发布者确认和返回。
当提供 an 时,使用 and 来确定每个 AMQP 协议交互操作在运行时的目标。
请参阅 Routing Connection Factory。mandatoryExpression
sendConnectionFactorySelectorExpression
receiveConnectionFactorySelectorExpression
RabbitTemplate
mandatoryExpression
mandatory
ReturnCallback
sendConnectionFactorySelectorExpression
receiveConnectionFactorySelectorExpression
AbstractRoutingConnectionFactory
lookupKey
ConnectionFactory
侦听器和路由连接工厂
您可以使用 routing 连接工厂配置 a,以启用基于队列名称的连接选择。
请参阅 Routing Connection Factory。SimpleMessageListenerContainer
RabbitTemplate
:选择RecoveryCallback
已添加该属性以在 .
请参阅添加重试功能。recoveryCallback
retryTemplate.execute()
MessageConversionException
改变
此异常现在是 的子类。
请考虑以下代码:AmqpException
try {
template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
...
}
catch (MessageConversionException e) {
...
}
第二个 catch 块不再可访问,需要移动到 catch-all catch 块的上方。AmqpException
RabbitMQ 3.4 兼容性
Spring AMQP 现在与 RabbitMQ 3.4 兼容,包括直接回复。 有关更多信息,请参阅兼容性和 RabbitMQ Direct 回复。
ContentTypeDelegatingMessageConverter
添加
已引入 ,以根据 中的属性选择要使用的 。
有关更多信息,请参阅 消息转换器 。ContentTypeDelegatingMessageConverter
MessageConverter
contentType
MessageProperties
A.2.10. 自 1.2 以来 1.3 中的更改
侦听器并发
侦听器容器现在支持根据工作负载动态扩展使用者数量,或者您可以在不停止容器的情况下以编程方式更改并发。 请参阅 侦听器并发。
侦听器队列
侦听器容器现在允许在运行时修改它侦听的队列。 此外,如果容器的至少一个已配置队列可供使用,则容器现在会启动。 请参阅 侦听器容器队列
此侦听器容器现在在启动期间重新声明任何自动删除队列。
请参阅 auto-delete
Queues。
消费者优先
侦听器容器现在支持使用者参数,允许设置参数。
请参阅 Consumer Priority。x-priority
专属消费者
您现在可以使用单个使用者进行配置,从而防止其他使用者侦听队列。
请参阅 Exclusive Consumer。SimpleMessageListenerContainer
exclusive
兔子管理员
现在,您可以让代理生成队列名称,而不管 、 和 设置如何。
请参见配置代理。durable
autoDelete
exclusive
直接交换绑定
以前,从配置的元素中省略该属性会导致 queue 或 exchange 与空字符串绑定作为路由键。
现在,它与提供的 或 .
如果要绑定空字符串路由密钥,则需要指定 。key
binding
direct-exchange
Queue
Exchange
key=""
AmqpTemplate
变化
现在提供了几种同步方法。
这些由 实现。
有关更多信息,请参阅接收消息。AmqpTemplate
receiveAndReply
RabbitTemplate
现在支持配置 a 以在 broker 不可用时尝试重试(使用可选的 back-off 策略)。
有关更多信息,请参阅添加重试功能。RabbitTemplate
RetryTemplate
缓存连接工厂
现在,您可以将缓存连接工厂配置为缓存实例及其实例,而不是使用单个连接和仅缓存实例。
请参阅连接和资源管理。Connection
Channel
Channel
绑定参数
的 现在支持解析 sub-element。
现在,您可以使用属性对(在单个 Headers 上匹配)或 sub-element(允许在多个 Headers 上匹配)配置 of。
这些选项是互斥的。
请参阅 Headers Exchange。<binding>
<exchange>
<binding-arguments>
<binding>
<headers-exchange>
key/value
<binding-arguments>
路由连接工厂
引入了一个新的。
它允许配置 mapping,以确定在运行时使用的目标。
请参阅 Routing Connection Factory。SimpleRoutingConnectionFactory
ConnectionFactories
ConnectionFactory
MessageBuilder
和MessagePropertiesBuilder
现在提供了用于构建消息或消息属性的“Fluent API”。 请参阅 Message Builder API。
RetryInterceptorBuilder
改变
现在提供了用于构建侦听器容器重试侦听器的“Fluent API”。 请参阅 同步操作失败 和 重试选项。
RepublishMessageRecoverer
添加
提供此新功能是为了允许在重试用尽时将失败的消息发布到另一个队列(包括标头中的堆栈跟踪信息)。
请参阅 消息侦听器和异步情况。MessageRecoverer
默认错误处理程序(自 1.3.2 起)
已将 default 添加到侦听器容器中。
此错误处理程序检测致命的消息转换问题,并指示容器拒绝该消息,以防止代理不断重新传送不可转换的消息。
请参见异常处理。ConditionalRejectingErrorHandler
侦听器容器 'missingQueuesFatal' 属性(自 1.3.5 起)
现在有一个名为 (default: ) 的属性。
以前,缺少队列总是致命的。
请参阅 消息侦听器容器配置。SimpleMessageListenerContainer
missingQueuesFatal
true
A.2.11. 自 1.1 以来对 1.2 的更改
RabbitMQ 版本
Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但保留了与早期版本的兼容性)。
对于 RabbitMQ 3.1.x 不再支持的功能,添加了某些弃用 — 联合交换和 .immediate
RabbitTemplate
兔子管理员
RabbitAdmin
现在提供了一个选项,允许 Exchange、Queue 和 Binding 声明在声明失败时继续。
以前,所有声明都会在失败时停止。
通过设置 ,将记录此类异常(在级别),但进一步的声明会继续。
这可能有用的一个示例是,当队列声明由于设置略有不同而失败时,通常会阻止其他声明继续进行。ignore-declaration-exceptions
WARN
ttl
RabbitAdmin
现在提供了一个名为 的附加方法。
您可以使用此命令来确定代理上是否存在队列(返回不存在的队列)。
此外,它还返回队列中的当前消息数以及当前使用者数。getQueueProperties()
null
Rabbit 模板
以前,当这些方法与固定回复队列一起使用时,两个自定义标头用于关联数据以及保留和恢复回复队列信息。
在此版本中,默认使用标准 message 属性 (),但您可以指定要改用的自定义属性。
此外,嵌套信息现在保留在模板内部,而不是使用自定义标头。…sendAndReceive()
correlationId
replyTo
该属性已弃用。
使用 RabbitMQ 3.0.x 或更高版本时,不得设置此属性。immediate
自动声明队列和其他项目
以前,在声明 queues、exchanges 和 bindings 时,您无法定义用于声明的连接工厂。
每个 Worker 都使用其连接声明所有组件。RabbitAdmin
从此版本开始,您现在可以将声明限制为特定实例。
请参见 条件声明。RabbitAdmin
AMQP 远程处理
现在提供了使用 Spring 远程技术的工具,使用 AMQP 作为 RPC 调用的传输。 有关更多信息,请参见使用 AMQP 进行 Spring 远程处理