附录 A:变更历史

本节介绍在版本更改时进行了哪些更改。spring-doc.cn

A.1. 当前版本

A.2. 以前的版本

A.2.1. 自 2.2 以来 2.3 中的更改

本节介绍版本 2.2 和版本 2.3 之间的更改。 有关以前版本中的更改,请参阅更改历史记录spring-doc.cn

连接工厂更改

现在提供了两个额外的连接工厂。 有关更多信息,请参阅选择连接工厂spring-doc.cn

@RabbitListener变化

您现在可以指定回复内容类型。 有关更多信息,请参阅 Reply ContentTypespring-doc.cn

消息转换器更改

如果配置了自定义反序列化器,则 s 现在可以反序列化抽象类 (包括接口) 。 有关更多信息,请参见Deserializing Abstract ClassesJackson2JMessageConverterObjectMapperspring-doc.cn

测试更改

提供了一个新的注释,用于在您不使用时自动配置一些基础结构 bean。 有关更多信息,请参阅 @SpringRabbitTest@SpringRabbitTestSpringBootTestspring-doc.cn

RabbitTemplate 更改

模板已重构,以便在 lambda 表达式中使用得更简单。 有关更多信息,请参阅 Correlated Publisher Confirms and ReturnsReturnCallbackReturnsCallbackspring-doc.cn

当使用 returns 和 correlated confirmed 时,现在需要一个唯一的属性。 有关更多信息,请参阅 Correlated Publisher Confirms and ReturnsCorrelationDataidspring-doc.cn

使用直接回复时,您现在可以配置模板,以便服务器不需要在回复中返回关联数据。 有关更多信息,请参阅 RabbitMQ Direct 回复spring-doc.cn

侦听器容器更改

现在提供了新的侦听器容器属性;在使用 RabbitMQ Sharding Plugin 时非常有用。consumeDelayspring-doc.cn

默认值现在调用 . 要恢复到之前的行为(不执行任何操作),请添加 no-op 处理程序。JavaLangErrorHandlerSystem.exit(99)spring-doc.cn

容器现在支持将 global 应用于通道而不是通道上的每个使用者的属性。globalQosprefetchCountspring-doc.cn

MessagePostProcessor 更改

压缩 s 现在使用逗号而不是冒号来分隔多个内容编码。 解压缩器可以处理这两种格式,但是,如果您使用此版本生成的消息被 2.2.12 之前的版本使用,则应将压缩器配置为使用旧的分隔符。 有关更多信息,请参阅修改消息 - 压缩等中的重要说明。MessagePostProcessorspring-doc.cn

多个 Broker 支持改进

有关更多信息,请参阅多个代理(或集群)支持spring-doc.cn

RepublishMessageRecoverer 更改

未提供支持 publisher 确认的此 recoverer 的新子类。 有关更多信息,请参见 Message Listeners and the Asynchronous Casespring-doc.cn

A.2.2. 自 2.1 以来 2.2 中的更改

本节介绍版本 2.1 和版本 2.2 之间的更改。spring-doc.cn

套件更改

以下类/接口已从 移动到 :org.springframework.amqp.rabbit.core.supportorg.springframework.amqp.rabbit.batchspring-doc.cn

此外,已从 移动到 。ListenerExecutionFailedExceptionorg.springframework.amqp.rabbit.listener.exceptionorg.springframework.amqp.rabbit.supportspring-doc.cn

依赖项更改

JUnit (4) 现在是可选依赖项,将不再显示为传递依赖项。spring-doc.cn

该模块现在是模块中的编译依赖项,以获得更好的目标应用程序开发体验,而我们只使用一个模块即可获得 AMQP 组件的完整测试实用程序堆栈。spring-rabbit-junitspring-rabbit-testspring-rabbit-testspring-doc.cn

“Breaking” API 更改

JUnit (5) 现在返回一个实例,而不是 ,它依赖于 JUnit 4。 它具有相同的 API,因此只需更改任何引用的类名即可。 有关更多信息,请参阅 JUnit5 条件RabbitAvailableCondition.getBrokerRunning()BrokerRunningSupportBrokerRunningspring-doc.cn

ListenerContainer 更改

默认情况下,具有致命异常的消息现在会被拒绝并且不会重新排队,即使确认模式是手动的。 有关更多信息,请参阅异常处理spring-doc.cn

现在可以使用 Micrometer s 监控侦听器性能。 有关更多信息,请参阅监控侦听器性能Timerspring-doc.cn

@RabbitListener 更改

现在,您可以在每个侦听器上配置 一个,覆盖出厂配置,以便更轻松地识别与侦听器关联的线程。 现在,您可以使用注解的属性覆盖容器工厂的属性。 有关更多信息,请参阅覆盖 Container Factory 属性executoracknowledgeModeackModespring-doc.cn

使用批处理时,方法现在可以在一次调用中接收完整的消息批次,而不是一次获取一条消息。@RabbitListenerspring-doc.cn

当一次接收一条批量消息时,最后一条消息的 message 属性设置为 true。isLastInBatchspring-doc.cn

此外,收到的批处理消息现在包含标头。amqp_batchSizespring-doc.cn

侦听器还可以使用在 中创建的批处理,即使该批处理不是由创建者创建的。 有关更多信息,请参阅选择容器SimpleMessageListenerContainerspring-doc.cn

Spring Data Projection 接口现在受 . 有关更多信息,请参见使用 Spring Data Projection 接口Jackson2JsonMessageConverterspring-doc.cn

现在,如果没有属性,则假定内容为 JSON,或者它是默认 () 。 有关更多信息,请参阅Message 转换Jackson2JsonMessageConvertercontentTypeapplication/octet-stringspring-doc.cn

同样地。现在假定内容为 XML(如果没有属性),或者它是默认的 ()。 有关更多信息,请参见Jackson2XmlMessageConverterJackson2XmlMessageConvertercontentTypeapplication/octet-stringspring-doc.cn

当方法返回结果时,bean 和 现在在回复消息属性中可用。 这允许配置 a,例如,在回复中设置一个 Headers 以指示在服务器上调用了哪个方法。 有关更多信息,请参阅回复管理@RabbitListenerMethodbeforeSendReplyMessagePostProcessorspring-doc.cn

现在,您可以配置 在发送回复消息之前对其进行修改。 有关更多信息,请参阅回复管理ReplyPostProcessorspring-doc.cn

AMQP 日志记录附加程序更改

Log4J 和 Logback 现在支持 SSL 选项。AmqpAppenderverifyHostnamespring-doc.cn

此外,这些 appender 现在可以配置为不将 MDC 条目添加为 headers。 引入了 boolean 选项来配置此类行为。addMdcAsHeadersspring-doc.cn

appender 现在支持该属性。SaslConfigspring-doc.cn

有关更多信息,请参见Logging Subsystem AMQP Appendersspring-doc.cn

MessageListenerAdapter 更改

现在,它提供了一种新方法来构建要传递到目标侦听器的参数数组,而旧方法已弃用。 有关更多信息,请参见MessageListenerAdapterMessageListenerAdapterbuildListenerArguments(Object, Channel, Message)spring-doc.cn

Exchange/Queue 声明更改

用于创建 and objects for declaration 的 and Fluent API 现在支持“众所周知”的参数。 有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder APIExchangeBuilderQueueBuilderExchangeQueueRabbitAdminspring-doc.cn

具有新属性 . 有关更多信息,请参阅 条件声明RabbitAdminexplicitDeclarationsOnlyspring-doc.cn

连接工厂更改

具有新属性 . 在提供代理节点地址列表时,该列表将在创建连接之前随机排列,以便尝试连接的顺序是随机的。 有关更多信息,请参阅连接到集群CachingConnectionFactoryshuffleAddressesspring-doc.cn

现在,当使用 Publisher 确认并返回时,将在连接工厂的 . 这可避免在回调中执行 rabbit 操作时可能出现的库死锁。 有关更多信息,请参阅 Correlated Publisher Confirms and Returnsexecutoramqp-clientsspring-doc.cn

此外,现在使用 enum 而不是两个互斥的 setter 方法指定发布者确认类型。ConfirmTypespring-doc.cn

现在,启用 SSL 时,默认使用 TLS 1.2。 有关更多信息,请参见RabbitConnectionFactoryBean和配置 SSLRabbitConnectionFactoryBeanspring-doc.cn

新的 MessagePostProcessor 类

类 和 分别用于支持压缩和解压缩 消息 content-encoding 设置为 .DeflaterPostProcessorInflaterPostProcessordeflatespring-doc.cn

其他更改

该对象(用于声明多个队列、交换、绑定)现在具有每种类型的过滤 getter。 有关更多信息,请参见Declaring Collections of Exchanges, Queues, and BindingsDeclarablesspring-doc.cn

现在,您可以在处理其声明之前自定义每个 bean。 有关更多信息,请参见 Automatic Declaration of Exchanges, Queues, and BindingsDeclarableRabbitAdminspring-doc.cn

singleActiveConsumer()已添加到 to set the queue 参数中。 有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder APIQueueBuilderx-single-active-consumerspring-doc.cn

具有 type 值的出站标头现在使用 instead of . 有关更多信息,请参阅 消息属性转换器Class<?>getName()toString()spring-doc.cn

现在支持恢复失败的创建者创建的批处理。 有关更多信息,请参阅使用 Batch 侦听器重试spring-doc.cn

A.2.3. 自 2.0 以来 2.1 中的更改

AMQP 客户端库

Spring AMQP 现在使用 RabbitMQ 团队提供的库的 5.4.x 版本。 默认情况下,此客户端配置了自动恢复。 请参阅 RabbitMQ 自动连接/拓扑恢复amqp-clientspring-doc.cn

从版本 4.0 开始,客户端默认启用自动恢复。 虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。 我们建议禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。 从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给. 默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-clientAutoRecoverConnectionNotCurrentlyOpenExceptionCachingConnectionFactoryConnectionFactoryRabbitConnectionFactoryBean
套件更改

某些类已移至不同的包。 大多数是内部类,不会影响用户应用程序。 两个例外是 和 。 这些接口现在位于 .ChannelAwareMessageListenerRabbitListenerErrorHandlerorg.springframework.amqp.rabbit.listener.apispring-doc.cn

发布者确认更改

当存在未完成的确认时,启用了发布者确认的通道不会返回到缓存中。 有关更多信息,请参阅 Correlated Publisher Confirms and Returnsspring-doc.cn

Listener Container Factory 改进

现在,您可以使用侦听器容器工厂创建任何侦听器容器,而不仅仅是那些用于注释或 . 有关更多信息,请参阅使用容器工厂@RabbitListener@RabbitListenerEndpointRegistryspring-doc.cn

ChannelAwareMessageListener现在继承自 。MessageListenerspring-doc.cn

Broker 事件侦听器

引入了 A 以将选定的代理事件发布为实例。 有关更多信息,请参阅 Broker Event ListenerBrokerEventListenerApplicationEventspring-doc.cn

RabbitAdmin 更改

发现 bean 类型的 bean(它是 - 、 和 对象的容器)并在代理上声明包含的对象。 不鼓励用户使用旧的声明机制(和其他机制),而应该改用 bean。 默认情况下,旧机制处于禁用状态。 有关更多信息,请参见Declaring Collections of Exchanges, Queues, and BindingsRabbitAdminDeclarablesDeclarableQueueExchangeBinding<Collection<Queue>>Declarablesspring-doc.cn

AnonymousQueue现在,默认情况下,实例声明为 Set to,以确保在应用程序连接到的节点上创建队列。 有关更多信息,请参阅 配置 Brokerx-queue-master-locatorclient-localspring-doc.cn

RabbitTemplate 更改

现在,您可以使用选项配置 ,以控制操作中回复使用者的标志。 有关更多信息,请参阅请求/回复消息。RabbitTemplatenoLocalReplyConsumernoLocalsendAndReceive()spring-doc.cn

CorrelationData对于发布者确认,现在有一个 ,您可以使用它来获取确认,而不是使用回调。 启用返回和确认后,关联数据(如果提供)将填充返回的消息。 有关更多信息,请参阅 Correlated Publisher Confirms and ReturnsListenableFuturespring-doc.cn

现在提供了一个 called 的方法来通知 subclasses 回复已超时,从而允许任何状态清理。 有关更多信息,请参阅 Reply Timeout (回复超时)。replyTimedOutspring-doc.cn

现在,您可以指定在将 request/reply 与 a(默认)一起使用时,在传递回复时发生异常(例如,延迟回复)时调用。 请参阅 上的 。 (也是从 2.0.11 开始)。ErrorHandlerDirectReplyToMessageListenerContainersetReplyErrorHandlerRabbitTemplatespring-doc.cn

消息转换

我们引入了一个新功能,以支持将消息从 XML 格式转换为 XML 格式。 有关更多信息,请参见Jackson2XmlMessageConverterJackson2XmlMessageConverterspring-doc.cn

管理 REST API

现在已弃用,取而代之的是直接 (或 ) 用法。 有关更多信息,请参阅 RabbitMQ REST APIRabbitManagementTemplatecom.rabbitmq.http.client.Clientcom.rabbitmq.http.client.ReactorNettyClientspring-doc.cn

@RabbitListener变化

侦听器容器工厂现在可以配置发送回复时使用的 and(可选)。 有关更多信息,请参阅启用侦听器终端节点注释RetryTemplateRecoveryCallbackspring-doc.cn

异步返回@RabbitListener

@RabbitListener方法现在可以返回 或 . 有关更多信息,请参阅 异步 @RabbitListener 返回类型ListenableFuture<?>Mono<?>spring-doc.cn

连接工厂 Bean 更改

默认情况下,now 调用 . 要恢复到之前的行为,请将该属性设置为 。RabbitConnectionFactoryBeanenableHostnameVerification()enableHostnameVerificationfalsespring-doc.cn

连接工厂更改

现在无条件地禁用底层 RabbitMQ 中的自动恢复,即使在构造函数中提供了预配置的实例。 虽然已经采取了步骤使 Spring AMQP 与自动恢复兼容,但出现了某些极端情况,问题仍然存在。 Spring AMQP 从 1.0.0 开始就有了自己的恢复机制,不需要使用 Client 端提供的恢复。 虽然在构建 后仍可以启用该功能 (使用 ),但我们强烈建议您不要这样做。 如果您在直接使用 client 工厂时需要自动恢复连接(而不是使用 Spring AMQP 组件),我们建议您使用单独的 RabbitMQ。CachingConnectionFactoryConnectionFactorycachingConnectionFactory.getRabbitConnectionFactory().setAutomaticRecoveryEnabled()CachingConnectionFactoryConnectionFactoryspring-doc.cn

侦听器容器更改

现在,默认值会完全丢弃在存在标头时导致致命错误的消息。 有关更多信息,请参阅异常处理ConditionalRejectingErrorHandlerx-deathspring-doc.cn

立即重新排队

引入了一个 new 来通知侦听器容器消息必须重新排队。 要使用此功能,需要添加新的实现。ImmediateRequeueAmqpExceptionImmediateRequeueMessageRecovererspring-doc.cn

A.2.4. 2.0 自 1.7 以来的变化

CachingConnectionFactory

从版本 2.0.2 开始,您可以将 配置为使用与侦听器容器使用的连接不同的连接。 此更改可避免在生产者因任何原因被阻止时出现使用者死锁。 有关更多信息,请参阅使用单独的连接RabbitTemplatespring-doc.cn

AMQP 客户端库

Spring AMQP 现在使用 RabbitMQ 团队提供的库的新 5.0.x 版本。 默认情况下,此客户端配置了自动恢复。 请参阅 RabbitMQ 自动连接/拓扑恢复amqp-clientspring-doc.cn

从版本 4.0 开始,客户端默认启用自动恢复。 虽然与此功能兼容, Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。 我们建议您禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。 从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给. 默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-clientAutoRecoverConnectionNotCurrentlyOpenExceptionCachingConnectionFactoryConnectionFactoryRabbitConnectionFactoryBean
一般更改

现在,默认情况下,它会构建持久交换。 默认情况下,a 中使用的注释还声明 durable exchanges。 默认情况下,在 a 中使用的注释如果已命名,则声明持久队列,如果匿名,则声明非持久队列。 有关更多信息,请参阅适用于队列和交换的 Builder API注释驱动的侦听器终端节点ExchangeBuilder@Exchange@QeueueBinding@Queue@RabbitListenerspring-doc.cn

已删除的类

UniquelyNameQueue不再提供。 创建具有唯一名称的持久非自动删除队列是不常见的。 此类已被删除。 如果需要其功能,请使用 .new Queue(UUID.randomUUID().toString())spring-doc.cn

新建侦听器容器

已与现有的 . 有关选择要使用的容器以及如何配置它们的信息,请参阅选择容器Message Listener 容器配置DirectMessageListenerContainerSimpleMessageListenerContainerspring-doc.cn

Log4j 附加程序

由于 log4j 的生命周期结束,此 appender 不再可用。 有关可用日志附加程序的信息,请参见Logging Subsystem AMQP Appendersspring-doc.cn

RabbitTemplate变化
以前,如果非事务性事务性在事务性侦听器容器线程上运行,则它参与现有事务。 这是一个严重的错误。 但是,用户可能依赖于此行为。 从版本 1.6.2 开始,您必须在模板上设置布尔值,使其参与容器事务。RabbitTemplatechannelTransacted

现在使用 a(默认情况下),而不是为每个请求创建新的使用者。 有关更多信息,请参阅 RabbitMQ Direct 回复RabbitTemplateDirectReplyToMessageListenerContainerspring-doc.cn

现在支持直接回复。 有关更多信息,请参阅 Async Rabbit TemplateAsyncRabbitTemplatespring-doc.cn

现在有 和 方法,这些方法采用参数,让调用方指定要将结果转换为的类型。 这对于复杂类型或当类型信息未在消息头中传达时特别有用。 它需要 . 有关更多信息,请参见接收消息请求/回复消息异步 Rabbit 模板使用 RabbitTemplate消息转换RabbitTemplateAsyncRabbitTemplatereceiveAndConvertconvertSendAndReceiveAsTypeParameterizedTypeReference<T>SmartMessageConverterJackson2JsonMessageConverterspring-doc.cn

现在,您可以使用 a 在专用通道上执行多项操作。 有关更多信息,请参阅 Scoped OperationsRabbitTemplatespring-doc.cn

侦听器适配器

可以方便地将 lambda 与 . 有关更多信息,请参见MessageListenerAdapterFunctionalInterfaceMessageListenerAdapterspring-doc.cn

侦听器容器更改
预取默认值

prefetch 默认值以前为 1,这可能导致高效消费者的利用率不足。 默认预取值现在是 250,在大多数常见情况下,这应该会让使用者忙碌起来,并且, 因此,可以提高吞吐量。spring-doc.cn

在某些情况下,prefetch 值应 低 — 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会累积 添加到客户端进程中的大量内存),并且如果需要严格的消息排序 (在这种情况下,prefetch 值应设置回 1)。 此外,对于低容量消息收发和多个使用者(包括单个侦听器容器实例中的并发),您可能希望减少预取,以便在使用者之间更均匀地分配消息。

有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中的使用者利用率的博文和这篇关于排队理论的博文。spring-doc.cn

消息计数

以前,为容器发出的消息返回。 此属性仅在您使用(例如,from methods)时适用,并且现在已初始化为容器消息。MessageProperties.getMessageCount()0basicGetRabbitTemplate.receive()nullspring-doc.cn

事务回滚行为

事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关更多信息,请参阅 回滚已接收消息的说明spring-doc.cn

关闭行为

如果容器线程不响应 Shutdown 内,则默认情况下会强制关闭通道。 有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。shutdownTimeoutspring-doc.cn

接收消息后处理器

如果 a 在属性中返回 ,则丢弃消息(并在适当时进行确认)。MessagePostProcessorafterReceiveMessagePostProcessorsnullspring-doc.cn

连接工厂更改

connection 和 channel listener 接口现在提供了一种获取有关异常信息的机制。 有关更多信息,请参阅连接和通道侦听器和发布是异步的 — 如何检测成功和失败spring-doc.cn

现在提供了一个 new 版本,用于填充来自 . 有关更多信息,请参阅连接和资源管理ConnectionNameStrategyAbstractConnectionFactoryspring-doc.cn

重试更改

不再提供。 它的功能现在是内置的。 有关更多信息,请参阅同步操作失败和重试选项MissingMessageIdAdvicespring-doc.cn

匿名队列命名

默认情况下,现在使用 default 而不是简单字符串命名。 有关更多信息,请参阅 AnonymousQueueAnonymousQueuesBase64UrlNamingStrategyUUIDspring-doc.cn

@RabbitListener变化

现在,您可以在 annotations 中提供简单的队列声明(仅绑定到默认 exchange)。 有关更多信息,请参阅 Annotation-driven Listener Endpoints@RabbitListenerspring-doc.cn

您现在可以配置注释,以便将任何异常返回给发件人。 您还可以配置 来处理异常。 有关更多信息,请参阅处理异常@RabbitListenerRabbitListenerErrorHandlerspring-doc.cn

现在,您可以在使用注释时将队列与多个路由键绑定。 现在还支持自定义交换类型,并默认声明持久交换。@QueueBinding@QueueBinding.exchange()spring-doc.cn

现在,您可以在注释级别设置侦听器容器的 ,而不必为不同的并发设置配置不同的容器工厂。concurrencyspring-doc.cn

现在,您可以在 Comments 级别设置侦听器容器的属性,从而覆盖容器工厂中的默认设置。autoStartupspring-doc.cn

现在,您可以在容器工厂中设置 after receive 和 before send (reply) 实例。MessagePostProcessorRabbitListenerspring-doc.cn

有关更多信息,请参阅 Annotation-driven Listener Endpointsspring-doc.cn

从版本 2.0.3 开始,可以将类级别的 Comments 之一指定为 default。 有关更多信息,请参阅 Multi-method Listeners@RabbitHandler@RabbitListenerspring-doc.cn

容器条件回滚

当使用外部事务管理器(例如 JDBC)时,当您为容器提供事务属性时,现在支持基于规则的回滚。 现在,当您使用交易通知时,它也更加灵活。 有关更多信息,请参阅条件回滚spring-doc.cn

删除 Jackson 1.x 支持

Jackson 转换器和相关组件在以前的版本中已弃用,现在已被删除。 您可以使用基于 Jackson 2.x 的类似组件。 有关更多信息,请参见Jackson2JsonMessageConverter1.xspring-doc.cn

JSON 消息转换器

当 the 设置为入站 JSON 消息时,默认转换类型现在为 。 以前,它是 . 要恢复到 ,您可以在 .TypeIdHashtableLinkedHashMapHashtableHashtablesetDefaultMapTypeDefaultClassMapperspring-doc.cn

XML 解析器

在解析 XML 组件时,如果存在属性,解析器不再将属性值注册为 Bean 别名。 有关更多信息,请参阅有关 idname 属性的说明。QueueExchangenameidspring-doc.cn

阻止的连接

您现在可以将 注入到对象中。 此外,当 Broker 阻止或取消阻止连接时,会发出 和 事件。com.rabbitmq.client.BlockedListenerorg.springframework.amqp.rabbit.connection.ConnectionConnectionBlockedEventConnectionUnblockedEventConnectionFactoryspring-doc.cn

有关更多信息,请参阅连接和资源管理spring-doc.cn

A.2.5. 1.7 自 1.6 以来的变化

AMQP 客户端库

Spring AMQP 现在使用 RabbitMQ 团队提供的库的新 4.0.x 版本。 默认情况下,此客户端配置了自动恢复。 请参阅 RabbitMQ 自动连接/拓扑恢复amqp-clientspring-doc.cn

默认情况下,4.0.x 客户端启用自动恢复。 虽然与此功能兼容, Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。 我们建议禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。 从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给. 默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-clientAutoRecoverConnectionNotCurrentlyOpenExceptionCachingConnectionFactoryConnectionFactoryRabbitConnectionFactoryBean
Log4j 2 升级

最低 Log4j 2 版本(适用于 )现在是 。 该框架不再与以前的版本兼容。 有关更多信息,请参见Logging Subsystem AMQP AppendersAmqpAppender2.7spring-doc.cn

Logback Appender

默认情况下,此 appender 不再捕获调用者数据(方法、行号)。 您可以通过设置配置选项来重新启用它。 有关可用日志附加程序的信息,请参见Logging Subsystem AMQP AppendersincludeCallerDataspring-doc.cn

Spring 重试升级

最低 Spring Retry 版本现在是。 该框架不再与以前的版本兼容。1.2spring-doc.cn

关闭行为

您现在可以设置为 ,如果容器线程没有响应 内的关闭,则强制关闭通道, 导致任何未确认的消息重新排队。 有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。forceCloseChanneltrueshutdownTimeoutspring-doc.cn

FasterXML Jackson 升级

现在,最低 Jackson 版本为 。 该框架不再与以前的版本兼容。2.8spring-doc.cn

JUnit@Rules

以前由框架内部使用的规则现在已在名为 . 有关更多信息,请参阅 JUnit4 @Rulesspring-rabbit-junitspring-doc.cn

容器条件回滚

当您使用外部事务管理器(例如 JDBC)时,当您为容器提供事务属性时,现在支持基于规则的回滚。 现在,当您使用交易通知时,它也更加灵活。spring-doc.cn

连接命名策略

现在提供了一个 new 版本,用于填充来自 . 有关更多信息,请参阅连接和资源管理ConnectionNameStrategyAbstractConnectionFactoryspring-doc.cn

侦听器容器更改
事务回滚行为

现在,您可以将事务回滚时的消息重新排队配置为一致,无论是否配置了事务管理器。 有关更多信息,请参阅 回滚已接收消息的说明spring-doc.cn

A.2.6. 早期版本

请参阅 以前的版本 以了解以前版本中的更改。spring-doc.cn

A.2.7. 1.6 自 1.5 以来的变化

测试支持

现在提供了新的测试支持库。 有关更多信息,请参阅测试支持spring-doc.cn

架构工人

提供用于配置和对象的 Fluent API 的生成器现已推出。 有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder APIQueueExchangespring-doc.cn

命名空间更改
连接工厂

现在,你可以将 a 添加到连接工厂 bean 声明中——例如,命名线程 由库创建。 有关更多信息,请参阅连接和资源管理thread-factoryamqp-clientspring-doc.cn

使用 时,您现在可以限制允许的连接总数。 有关更多信息,请参阅连接和资源管理CacheMode.CONNECTIONspring-doc.cn

队列定义

您现在可以为匿名队列提供命名策略。 有关更多信息,请参阅 AnonymousQueuespring-doc.cn

侦听器容器更改
空闲消息侦听器检测

您现在可以将侦听器容器配置为在空闲时发布实例。 有关更多信息,请参阅 Detecting Idle Asynchronous ConsumerApplicationEventspring-doc.cn

不匹配队列检测

默认情况下,当侦听器容器启动时,如果检测到属性或参数不匹配的队列, 容器会记录异常,但会继续侦听。 容器现在具有一个名为 的属性,该属性可防止容器(和上下文)无法 如果在启动过程中检测到问题,则启动 Starting。 如果稍后检测到问题,例如从连接故障中恢复后,它还会停止容器。 有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。mismatchedQueuesFatalspring-doc.cn

侦听器容器日志记录

现在,侦听器容器将其作为 . 它对日志分析很有用。beanNameSimpleAsyncTaskExecutorthreadNamePrefixspring-doc.cn

默认错误处理程序

默认错误处理程序 () 现在将不可恢复的异常视为致命异常。 有关更多信息,请参阅异常处理ConditionalRejectingErrorHandler@RabbitListenerspring-doc.cn

AutoDeclare和 InstancesRabbitAdmin

有关该选项的语义的一些更改,请参见 Message Listener Container Configuration () 的实例。autoDeclareRabbitAdminspring-doc.cn

AmqpTemplate:超时接收

已经为 及其实现引入了许多新方法。 有关更多信息,请参阅轮询使用者receive()timeoutAmqpTemplateRabbitTemplatespring-doc.cn

AsyncRabbitTemplate

引入了一个新的。 此模板提供了许多 send 和 receive 方法,其中返回值为 a ,它可以 稍后用于同步或异步获取结果。 有关更多信息,请参阅 Async Rabbit TemplateAsyncRabbitTemplateListenableFuturespring-doc.cn

RabbitTemplate变化

1.4.1 引入了在 broker 支持时使用 Direct reply-to 的功能。 这比对每个回复使用临时队列更有效。 此版本允许您通过将属性设置为 来覆盖此默认行为并使用临时队列。 有关更多信息,请参阅 RabbitMQ Direct 回复useTemporaryReplyQueuestruespring-doc.cn

现在支持 ( when using Java configuration). 有关更多信息,请参阅经过验证的 User-ID RabbitMQ 文档经过验证的用户 IDRabbitTemplateuser-id-expressionuserIdExpressionspring-doc.cn

消息属性
CorrelationId

message 属性现在可以是 . 有关更多信息,请参阅 消息属性转换器correlationIdStringspring-doc.cn

长字符串标头

以前,“转换后的”标头长度超过长字符串限制(默认为 1024) 到 a 中(实际上,它引用了实例的 )。 在输出时,此标头未被转换(除了转换为 String — 例如,通过调用流)。DefaultMessagePropertiesConverterDataInputStreamLongStringDataInputStreamjava.io.DataInputStream@1d057a39toString()spring-doc.cn

在此版本中,长实例现在默认保留为实例。 您可以使用 、 或 方法访问内容。 现在,大量传入也可以在输出上正确 “转换” 。LongStringLongStringgetBytes[]toString()getStream()LongStringspring-doc.cn

有关更多信息,请参阅 消息属性转换器spring-doc.cn

入站配送模式

该属性不再映射到 . 如果使用相同的对象发送出站消息,则此更改可避免意外传播。 相反,入站标头映射到 .deliveryModeMessageProperties.deliveryModeMessagePropertiesdeliveryModeMessageProperties.receivedDeliveryModespring-doc.cn

有关更多信息,请参阅 消息属性转换器spring-doc.cn

使用带注释的端点时,标头在名为 .AmqpHeaders.RECEIVED_DELIVERY_MODEspring-doc.cn

有关更多信息,请参阅带注释的端点方法签名spring-doc.cn

入站用户 ID

该属性不再映射到 . 如果使用相同的对象发送出站消息,则此更改可避免意外传播。 相反,入站标头映射到 .user_idMessageProperties.userIdMessagePropertiesuserIdMessageProperties.receivedUserIdspring-doc.cn

有关更多信息,请参阅 消息属性转换器spring-doc.cn

使用带注释的端点时,标头在名为 .AmqpHeaders.RECEIVED_USER_IDspring-doc.cn

有关更多信息,请参阅带注释的端点方法签名spring-doc.cn

RabbitAdmin变化
声明失败

以前,该标志仅对频道上生效(如 mis-matched 参数)。 它现在对任何异常(如 )生效。 此外,现在每当声明失败时都会发布 a。 最后一个声明事件也可用作 property 。 有关更多信息,请参阅 配置 BrokerignoreDeclarationFailuresIOExceptionTimeoutExceptionDeclarationExceptionEventRabbitAdminlastDeclarationExceptionEventspring-doc.cn

@RabbitListener变化
每个 bean 的多个容器

当您使用 Java 8 或更高版本时,您现在可以向类添加多个注释,或者 他们的方法。 使用 Java 7 或更早版本时,您可以使用 container 注解来提供相同的 功能性。 有关更多信息,请参阅 @Repeatable @RabbitListener@RabbitListener@Bean@RabbitListenersspring-doc.cn

@SendToSPEL 表达式

@SendTo对于没有属性的路由回复,现在可以根据 请求/回复。 有关更多信息,请参阅回复管理replyTospring-doc.cn

@QueueBinding改进

现在,您可以在注释中为 queues、exchanges 和 bindings 指定参数。 标头交换现在由 . 有关更多信息,请参阅 Annotation-driven Listener Endpoints@QueueBinding@QueueBindingspring-doc.cn

延迟消息交换

Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件具有一流的支持。 有关更多信息,请参阅 Delayed Message Exchangespring-doc.cn

Exchange 内部标志

现在,任何定义都可以标记为 ,并在 声明交易所。 有关更多信息,请参阅 配置 BrokerExchangeinternalRabbitAdminspring-doc.cn

CachingConnectionFactory变化
CachingConnectionFactory缓存统计

现在,在运行时和 JMX 上提供缓存属性。 有关更多信息,请参阅 Runtime Cache Properties (运行时缓存属性)。CachingConnectionFactoryspring-doc.cn

访问底层 RabbitMQ 连接工厂

添加了一个新的 getter 以提供对底层工厂的访问。 例如,您可以使用此 getter 来添加自定义连接属性。 有关更多信息,请参阅添加自定义客户端连接属性spring-doc.cn

Channel Cache

默认通道缓存大小已从 1 增加到 25。 有关更多信息,请参阅连接和资源管理spring-doc.cn

此外,不再将缓存大小调整为至少与数字 of — 这是多余的,因为容器使用者通道永远不会被缓存。SimpleMessageListenerContainerconcurrentConsumersspring-doc.cn

RabbitConnectionFactoryBean

工厂 Bean 现在公开了一个属性,用于将 Client 端连接属性添加到由生成的 厂。spring-doc.cn

Java 反序列化

现在,您可以在使用 Java 反序列化时配置允许类的“允许列表”。 如果您接受包含来自 untrusted sources 的 untrusted sources。 有关更多信息,请参阅 Java 反序列化spring-doc.cn

JSON 格式MessageConverter

对 JSON 消息转换器的改进现在允许使用没有类型信息的消息 在消息标头中。 有关更多信息,请参见带注释方法的消息转换Jackson2JsonMessageConverterspring-doc.cn

日志记录 Appender
日志 4j 2

添加了 log4j 2 appender,现在可以为 appender 配置一个属性来连接 发送到代理集群。addressesspring-doc.cn

客户端连接属性

您现在可以将自定义客户端连接属性添加到 RabbitMQ 连接。spring-doc.cn

有关更多信息,请参见Logging Subsystem AMQP Appendersspring-doc.cn

A.2.8. 1.5 自 1.4 以来的变化

spring-erlang不再受支持

该 jar 不再包含在分发中。 请改用 RabbitMQ REST APIspring-erlangspring-doc.cn

CachingConnectionFactory变化
中的 Empty addresses 属性CachingConnectionFactory

以前,如果连接工厂配置了主机和端口,但还为 提供了空 String,则会忽略主机和端口。 现在,空 String 的处理方式与 a 相同,并且使用 host 和 port。addressesaddressesnullspring-doc.cn

URI 构造函数

具有一个带有参数的附加构造函数,用于配置代理连接。CachingConnectionFactoryURIspring-doc.cn

连接重置

添加了一个名为 (的新方法),以允许用户重置连接 (或连接) 。 例如,您可以使用此选项在故障转移到辅助代理后重新连接到主代理。 这确实会影响进程内操作。 现有方法的作用完全相同,但新方法的名称不那么令人生畏。resetConnection()destroy()spring-doc.cn

用于控制容器队列声明行为的属性

当侦听器容器使用者启动时,他们尝试被动声明队列以确保它们可用 在经纪人上。 以前,如果这些声明失败(例如,因为队列不存在)或当 HA 队列 移动时,重试逻辑固定为每隔 5 秒进行三次重试尝试。 如果队列仍然存在,则行为由属性 (default: ) 控制。 此外,对于配置为从多个队列侦听的容器,如果只有一个队列子集可用,则使用者 以 60 秒的固定间隔重试缺少的队列。missingQueuesFataltruespring-doc.cn

的 、 和 属性现在是可配置的。 有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。declarationRetriesfailedDeclarationRetryIntervalretryDeclarationIntervalspring-doc.cn

类套餐更改

类已从 移动到 。RabbitGatewaySupporto.s.amqp.rabbit.core.supporto.s.amqp.rabbit.corespring-doc.cn

DefaultMessagePropertiesConverter变化

您现在可以将 确定已转换的 A 的最大长度 到 a 而不是 a 。 转换器具有将该值作为限制的替代构造函数。 以前,此限制是硬编码为 bytes。 (在 1.4.4 中也可用)。DefaultMessagePropertiesConverterLongStringStringDataInputStream1024spring-doc.cn

@RabbitListener改进
@QueueBinding@RabbitListener

该属性已添加到注释中,与属性互斥,以允许指定 、 its 和 for 通过 on 声明 经纪人。bindings@RabbitListenerqueuesqueueexchangebindingRabbitAdminspring-doc.cn

SPEL 输入@SendTo

的默认回复地址 () 现在可以是 SPEL 表达式。@SendTo@RabbitListenerspring-doc.cn

通过属性创建多个队列名称

现在,您可以结合使用 SPEL 和属性占位符来为侦听器指定多个队列。spring-doc.cn

有关更多信息,请参阅 Annotation-driven Listener Endpointsspring-doc.cn

自动交换、排队和绑定声明

您现在可以声明定义这些实体集合的 bean,并且添加了 contents 添加到它在建立连接时声明的实体列表中。 有关更多信息,请参见Declaring Collections of Exchanges, Queues, and BindingsRabbitAdminspring-doc.cn

RabbitTemplate变化
reply-address添加

该属性已作为替代 添加到组件中。 有关更多信息,请参阅请求/回复消息。 (在 1.4.4 中也作为 ) 上的 setter 提供。reply-address<rabbit-template>reply-queueRabbitTemplatespring-doc.cn

阻塞方法receive

现在支持 blocking in 和 methods. 有关更多信息,请参阅轮询使用者RabbitTemplatereceiveconvertAndReceivespring-doc.cn

对于 Methods 是必需的sendAndReceive

如果在使用 和 方法时设置了标志,则调用线程 如果无法传递请求消息,则引发 an。 有关更多信息,请参阅 Reply Timeout (回复超时)。mandatorysendAndReceiveconvertSendAndReceiveAmqpMessageReturnedExceptionspring-doc.cn

不正确的回复侦听器配置

框架会尝试在使用命名回复队列时验证回复侦听器容器的配置是否正确。spring-doc.cn

有关更多信息,请参阅 Reply Listener Containerspring-doc.cn

RabbitManagementTemplate添加

引入了 RabbitMQ Broker 以使用其管理插件提供的 REST API 来监控和配置 RabbitMQ Broker。 有关更多信息,请参阅 RabbitMQ REST APIRabbitManagementTemplatespring-doc.cn

侦听器容器 Bean 名称 (XML)

元素上的属性已被删除。 从此版本开始,将单独使用 on the child 元素来命名为每个侦听器元素创建的侦听器容器 Bean。id<listener-container/>id<listener/>spring-doc.cn

应用正常的 Spring bean 名称覆盖。 如果以后使用与现有 Bean 相同的 bean 进行解析,则新定义将覆盖现有 Bean。 以前,bean 名称由 和 元素的属性组成。<listener/>idid<listener-container/><listener/>spring-doc.cn

迁移到此版本时,如果您的元素上有属性,请删除这些属性,然后改为在子元素上设置 。id<listener-container/>id<listener/>spring-doc.cn

但是,为了支持以组的形式启动和停止容器,添加了一个新属性。 定义此属性后,此元素创建的容器将添加到具有此名称的 bean(类型为 )中。 您可以迭代此组以启动和停止容器。groupCollection<SimpleMessageListenerContainer>spring-doc.cn

类级别@RabbitListener

现在可以在类级别应用注释。 与新的方法注释一起,这允许您根据有效负载类型选择处理程序方法。 有关更多信息,请参阅 Multi-method Listeners@RabbitListener@RabbitHandlerspring-doc.cn

SimpleMessageListenerContainer: BackOff 支持

现在可以为 提供用于启动恢复的实例。 有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。SimpleMessageListenerContainerBackOffconsumerspring-doc.cn

通道关闭日志记录

引入了一种控制 channel closure 的对数级别的机制。 请参见记录通道关闭事件spring-doc.cn

应用程序事件

现在,当使用者发生故障时,它会发出应用程序事件。 有关更多信息,请参阅使用者事件SimpleMessageListenerContainerspring-doc.cn

Consumer 标签配置

以前,异步使用者的使用者标签是由 Broker 生成的。 在此版本中,现在可以为侦听器容器提供命名策略。 请参阅 Consumer Tagsspring-doc.cn

MessageListenerAdapter

现在支持将队列名称(或使用者标签)映射到方法名称,以确定 根据从中接收消息的队列调用哪个委托方法。MessageListenerAdapterspring-doc.cn

LocalizedQueueConnectionFactory添加

LocalizedQueueConnectionFactory是一个新的连接工厂,它连接到镜像队列实际所在的集群中的节点。spring-doc.cn

匿名队列命名

从版本 1.5.3 开始,您现在可以控制名称的生成方式。 有关更多信息,请参阅 AnonymousQueueAnonymousQueuespring-doc.cn

A.2.9. 自 1.3 以来 1.4 中的更改

@RabbitListener注解

POJO 侦听器可以用 、 enabled by 或 进行注释。 此功能需要 Spring Framework 4.1。 有关更多信息,请参阅 Annotation-driven Listener Endpoints@RabbitListener@EnableRabbit<rabbit:annotation-driven />spring-doc.cn

RabbitMessagingTemplate添加

new 允许您使用实例与 RabbitMQ 交互。 在内部,它使用 ,您可以正常配置。 此功能需要 Spring Framework 4.1。 有关更多信息,请参阅消息收发集成RabbitMessagingTemplatespring-messagingMessageRabbitTemplatespring-doc.cn

侦听器容器属性missingQueuesFatal

1.3.5 在 上引入了 属性。 现在,这在侦听器容器命名空间元素上可用。 请参阅 消息侦听器容器配置missingQueuesFatalSimpleMessageListenerContainerspring-doc.cn

RabbitTemplate 接口ConfirmCallback

此接口上的方法有一个名为 . 如果可用,此参数包含否定确认 (nack) 的原因。 请参阅 相关发布者确认和返回confirmcausespring-doc.cn

RabbitConnectionFactoryBean添加

RabbitConnectionFactoryBean创建由 . 这允许使用 Spring 的依赖项注入配置 SSL 选项。 请参阅配置底层客户端连接工厂ConnectionFactoryCachingConnectionFactoryspring-doc.cn

CachingConnectionFactory

现在允许将 设置为 命名空间中的属性或属性。 它在底层 RabbitMQ 上设置属性。 请参阅配置底层客户端连接工厂CachingConnectionFactoryconnectionTimeoutConnectionFactoryspring-doc.cn

Log Appender

引入了 Logback。 它提供类似于 的选项。 有关更多信息,请参阅这些类的 JavaDoc。org.springframework.amqp.rabbit.logback.AmqpAppenderorg.springframework.amqp.rabbit.log4j.AmqpAppenderspring-doc.cn

Log4j 现在支持属性 ( or , default: )。 以前,所有 log4j 消息都是 .AmqpAppenderdeliveryModePERSISTENTNON_PERSISTENTPERSISTENTPERSISTENTspring-doc.cn

appender 还支持修改 before sending —— 例如,允许添加自定义 Headers。 子类应覆盖 .MessagepostProcessMessageBeforeSend()spring-doc.cn

侦听器队列

现在,默认情况下,侦听器容器会在启动期间重新声明任何缺失的队列。 已向 添加了一个新属性,以防止这些重新声明。 请参阅 auto-delete Queuesauto-declare<rabbit:listener-container>spring-doc.cn

RabbitTemplate: 和表达式mandatoryconnectionFactorySelector

的 、 和 SPEL 表达式的属性已添加到 。 这用于在使用 a 时根据每条请求消息评估布尔值。 请参阅 相关发布者确认和返回。 当提供 an 时,使用 and 来确定每个 AMQP 协议交互操作在运行时的目标。 请参阅 Routing Connection FactorymandatoryExpressionsendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpressionRabbitTemplatemandatoryExpressionmandatoryReturnCallbacksendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpressionAbstractRoutingConnectionFactorylookupKeyConnectionFactoryspring-doc.cn

侦听器和路由连接工厂

您可以使用 routing 连接工厂配置 a,以启用基于队列名称的连接选择。 请参阅 Routing Connection FactorySimpleMessageListenerContainerspring-doc.cn

RabbitTemplate:选择RecoveryCallback

已添加该属性以在 . 请参阅添加重试功能recoveryCallbackretryTemplate.execute()spring-doc.cn

MessageConversionException改变

此异常现在是 的子类。 请考虑以下代码:AmqpExceptionspring-doc.cn

try {
    template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
	...
}
catch (MessageConversionException e) {
	...
}

第二个 catch 块不再可访问,需要移动到 catch-all catch 块的上方。AmqpExceptionspring-doc.cn

RabbitMQ 3.4 兼容性

Spring AMQP 现在与 RabbitMQ 3.4 兼容,包括直接回复。 有关更多信息,请参阅兼容性RabbitMQ Direct 回复spring-doc.cn

ContentTypeDelegatingMessageConverter添加

已引入 ,以根据 中的属性选择要使用的 。 有关更多信息,请参阅 消息转换器ContentTypeDelegatingMessageConverterMessageConvertercontentTypeMessagePropertiesspring-doc.cn

A.2.10. 自 1.2 以来 1.3 中的更改

侦听器并发

侦听器容器现在支持根据工作负载动态扩展使用者数量,或者您可以在不停止容器的情况下以编程方式更改并发。 请参阅 侦听器并发spring-doc.cn

侦听器队列

侦听器容器现在允许在运行时修改它侦听的队列。 此外,如果容器的至少一个已配置队列可供使用,则容器现在会启动。 请参阅 侦听器容器队列spring-doc.cn

此侦听器容器现在在启动期间重新声明任何自动删除队列。 请参阅 auto-delete Queuesspring-doc.cn

消费者优先

侦听器容器现在支持使用者参数,允许设置参数。 请参阅 Consumer Priorityx-priorityspring-doc.cn

专属消费者

您现在可以使用单个使用者进行配置,从而防止其他使用者侦听队列。 请参阅 Exclusive ConsumerSimpleMessageListenerContainerexclusivespring-doc.cn

兔子管理员

现在,您可以让代理生成队列名称,而不管 、 和 设置如何。 请参见配置代理durableautoDeleteexclusivespring-doc.cn

直接交换绑定

以前,从配置的元素中省略该属性会导致 queue 或 exchange 与空字符串绑定作为路由键。 现在,它与提供的 或 . 如果要绑定空字符串路由密钥,则需要指定 。keybindingdirect-exchangeQueueExchangekey=""spring-doc.cn

AmqpTemplate变化

现在提供了几种同步方法。 这些由 实现。 有关更多信息,请参阅接收消息AmqpTemplatereceiveAndReplyRabbitTemplatespring-doc.cn

现在支持配置 a 以在 broker 不可用时尝试重试(使用可选的 back-off 策略)。 有关更多信息,请参阅添加重试功能RabbitTemplateRetryTemplatespring-doc.cn

缓存连接工厂

现在,您可以将缓存连接工厂配置为缓存实例及其实例,而不是使用单个连接和仅缓存实例。 请参阅连接和资源管理ConnectionChannelChannelspring-doc.cn

绑定参数

的 现在支持解析 sub-element。 现在,您可以使用属性对(在单个 Headers 上匹配)或 sub-element(允许在多个 Headers 上匹配)配置 of。 这些选项是互斥的。 请参阅 Headers Exchange<binding><exchange><binding-arguments><binding><headers-exchange>key/value<binding-arguments>spring-doc.cn

路由连接工厂

引入了一个新的。 它允许配置 mapping,以确定在运行时使用的目标。 请参阅 Routing Connection FactorySimpleRoutingConnectionFactoryConnectionFactoriesConnectionFactoryspring-doc.cn

MessageBuilderMessagePropertiesBuilder

现在提供了用于构建消息或消息属性的“Fluent API”。 请参阅 Message Builder APIspring-doc.cn

RetryInterceptorBuilder改变

现在提供了用于构建侦听器容器重试侦听器的“Fluent API”。 请参阅 同步操作失败 和 重试选项spring-doc.cn

RepublishMessageRecoverer添加

提供此新功能是为了允许在重试用尽时将失败的消息发布到另一个队列(包括标头中的堆栈跟踪信息)。 请参阅 消息侦听器和异步情况MessageRecovererspring-doc.cn

默认错误处理程序(自 1.3.2 起)

已将 default 添加到侦听器容器中。 此错误处理程序检测致命的消息转换问题,并指示容器拒绝该消息,以防止代理不断重新传送不可转换的消息。 请参见异常处理ConditionalRejectingErrorHandlerspring-doc.cn

侦听器容器 'missingQueuesFatal' 属性(自 1.3.5 起)

现在有一个名为 (default: ) 的属性。 以前,缺少队列总是致命的。 请参阅 消息侦听器容器配置SimpleMessageListenerContainermissingQueuesFataltruespring-doc.cn

A.2.11. 自 1.1 以来对 1.2 的更改

RabbitMQ 版本

Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但保留了与早期版本的兼容性)。 对于 RabbitMQ 3.1.x 不再支持的功能,添加了某些弃用 — 联合交换和 .immediateRabbitTemplatespring-doc.cn

兔子管理员

RabbitAdmin现在提供了一个选项,允许 Exchange、Queue 和 Binding 声明在声明失败时继续。 以前,所有声明都会在失败时停止。 通过设置 ,将记录此类异常(在级别),但进一步的声明会继续。 这可能有用的一个示例是,当队列声明由于设置略有不同而失败时,通常会阻止其他声明继续进行。ignore-declaration-exceptionsWARNttlspring-doc.cn

RabbitAdmin现在提供了一个名为 的附加方法。 您可以使用此命令来确定代理上是否存在队列(返回不存在的队列)。 此外,它还返回队列中的当前消息数以及当前使用者数。getQueueProperties()nullspring-doc.cn

Rabbit 模板

以前,当这些方法与固定回复队列一起使用时,两个自定义标头用于关联数据以及保留和恢复回复队列信息。 在此版本中,默认使用标准 message 属性 (),但您可以指定要改用的自定义属性。 此外,嵌套信息现在保留在模板内部,而不是使用自定义标头。…​sendAndReceive()correlationIdreplyTospring-doc.cn

该属性已弃用。 使用 RabbitMQ 3.0.x 或更高版本时,不得设置此属性。immediatespring-doc.cn

JSON 消息转换器

现在提供了 Jackson 2.x 以及使用 Jackson 1.x 的现有转换器。MessageConverterspring-doc.cn

自动声明队列和其他项目

以前,在声明 queues、exchanges 和 bindings 时,您无法定义用于声明的连接工厂。 每个 Worker 都使用其连接声明所有组件。RabbitAdminspring-doc.cn

从此版本开始,您现在可以将声明限制为特定实例。 请参见 条件声明RabbitAdminspring-doc.cn

AMQP 远程处理

现在提供了使用 Spring 远程技术的工具,使用 AMQP 作为 RPC 调用的传输。 有关更多信息,请参见使用 AMQP 进行 Spring 远程处理spring-doc.cn

请求的心跳

一些用户要求在 Spring AMQP 上公开底层客户端连接工厂的属性。 此功能现已推出。 以前,有必要将 AMQP 客户端工厂配置为单独的 bean,并在 .requestedHeartBeatsCachingConnectionFactoryCachingConnectionFactoryspring-doc.cn

A.2.12. 自 1.0 以来对 1.1 的更改

常规

Spring-AMQP 现在是用 Gradle 构建的。spring-doc.cn

添加对发布者确认和返回的支持。spring-doc.cn

添加了对 HA 队列和代理故障转移的支持。spring-doc.cn

添加了对死信交换和死信队列的支持。spring-doc.cn

AMQP Log4j 附加程序

添加了一个选项,以支持向记录的消息添加消息 ID。spring-doc.cn

添加一个选项,以允许在转换为 时使用名称的规范。CharsetStringbyte[]spring-doc.cn