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