测试支持

现在提供了新的测试支持库。 有关详细信息,请参阅测试支持

建筑工人

现在可以使用提供用于配置和对象的流畅 API 的构建器。 有关详细信息,请参阅用于队列和 Exchange 的构建器 APIQueueExchange

命名空间更改

连接工厂

现在,您可以向连接工厂 Bean 声明添加 a ,例如,命名线程 由库创建。 有关详细信息,请参阅连接和资源管理thread-factoryamqp-client

使用 时,现在可以限制允许的连接总数。 有关详细信息,请参阅连接和资源管理CacheMode.CONNECTION

队列定义

现在,您可以为匿名队列提供命名策略。 有关详细信息,请参阅 AnonymousQueue

侦听器容器更改

空闲消息侦听器检测

现在,您可以将侦听器容器配置为在空闲时发布实例。 有关详细信息,请参阅检测空闲异步使用者ApplicationEvent

不匹配队列检测

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

侦听器容器日志记录

现在,侦听器容器将其作为 . 它对于日志分析很有用。beanNameSimpleAsyncTaskExecutorthreadNamePrefix

默认错误处理程序

默认错误处理程序 () 现在将不可恢复的异常视为致命异常。 有关详细信息,请参阅异常处理ConditionalRejectingErrorHandler@RabbitListener

AutoDeclare和实例RabbitAdmin

请参阅消息侦听器容器配置 (),了解该选项在使用 方面的语义的一些更改 应用程序上下文中的实例。autoDeclareRabbitAdmin

AmqpTemplate:超时接收

已经引入了许多新方法及其实现。 有关详细信息,请参阅轮询使用者receive()timeoutAmqpTemplateRabbitTemplate

AsyncRabbitTemplate

引入了一个新的。 此模板提供了许多发送和接收方法,其中返回值为 ,可以 稍后用于同步或异步获取结果。 有关详细信息,请参阅异步兔子模板AsyncRabbitTemplateListenableFuture

RabbitTemplate变化

1.4.1 引入了在代理支持时使用直接回复的功能。 它比对每个回复使用临时队列更有效。 此版本允许您通过将属性设置为 来覆盖此默认行为并使用临时队列。 有关更多信息,请参见 RabbitMQ Direct reply-touseTemporaryReplyQueuestrue

现在支持(使用 Java 配置时)。 有关更多信息,请参阅验证的用户 ID RabbitMQ 文档验证的用户标识RabbitTemplateuser-id-expressionuserIdExpression

消息属性

CorrelationId

message 属性现在可以是 . 有关更多信息,请参见消息属性转换器correlationIdString

长字符串标头

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

在此版本中,默认情况下,长实例现在保留为实例。 可以使用 、 或 方法访问内容。 现在,大型传入在输出上也被正确“转换”。LongStringLongStringgetBytes[]toString()getStream()LongString

有关更多信息,请参见消息属性转换器

入库递送模式

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

有关更多信息,请参见消息属性转换器

使用带批注的终结点时,标头在名为 的标头中提供。AmqpHeaders.RECEIVED_DELIVERY_MODE

有关详细信息,请参阅带批注的终结点方法签名

入站用户 ID

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

有关更多信息,请参见消息属性转换器

使用带批注的终结点时,标头在名为 的标头中提供。AmqpHeaders.RECEIVED_USER_ID

有关详细信息,请参阅带批注的终结点方法签名

RabbitAdmin变化

声明失败

以前,该标志仅在频道上生效(例如不匹配 参数)。 现在,它对任何异常(如 )都生效。 此外,现在每当声明失败时,都会发布 a。 最后一个声明事件也可作为属性使用。 有关更多信息,请参阅配置代理ignoreDeclarationFailuresIOExceptionTimeoutExceptionDeclarationExceptionEventRabbitAdminlastDeclarationExceptionEvent

@RabbitListener变化

每个 Bean 有多个容器

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

@SendToSpEL 表达式

@SendTo对于路由没有属性的回复,现在可以根据 SpEL 表达式进行评估 请求/回复。 有关详细信息,请参阅回复管理replyTo

@QueueBinding改进

现在,您可以在批注中指定队列、交换和绑定的参数。 标头交换现在由 支持。 有关详细信息,请参阅注释驱动的侦听器端点@QueueBinding@QueueBinding

延迟的消息交换

Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件提供了一流的支持。 有关详细信息,请参阅延迟消息交换

Exchange 内部标志

现在,任何定义都可以标记为 ,并在以下情况下将值传递给代理 声明交换。 有关更多信息,请参阅配置代理ExchangeinternalRabbitAdmin

CachingConnectionFactory变化

CachingConnectionFactory缓存统计信息

现在在运行时和 JMX 上提供缓存属性。 有关更多信息,请参见运行时缓存属性CachingConnectionFactory

访问底层 RabbitMQ 连接工厂

添加了一个新的 getter 以提供对基础工厂的访问。 例如,您可以使用此 getter 添加自定义连接属性。 有关详细信息,请参阅添加自定义客户端连接属性

通道缓存

默认通道缓存大小已从 1 增加到 25。 有关详细信息,请参阅连接和资源管理

此外,不再将缓存大小调整为至少与数字一样大 的 — 这是多余的,因为容器使用者通道永远不会缓存。SimpleMessageListenerContainerconcurrentConsumers

RabbitConnectionFactoryBean

工厂 Bean 现在公开一个属性,用于将客户机连接属性添加到由生成的 厂。

Java 反序列化

现在,您可以在使用 Java 反序列化时配置允许类的“允许列表”。 如果接受带有序列化 java 对象的消息,则应考虑创建允许列表 不受信任的来源。 有关更多信息,请参见 Java 反序列化

JSON的MessageConverter

对 JSON 消息转换器的改进现在允许使用没有类型信息的消息 在邮件头中。 有关更多信息,请参见 Message Conversion for Annotated Methods[json-message-converter]。

记录追加器

日志4j 2

添加了 log4j 2 appender,现在可以使用要连接的属性来配置 appender 到代理集群。addresses

客户端连接属性

现在,您可以将自定义客户端连接属性添加到 RabbitMQ 连接。

有关详细信息,请参阅日志记录子系统 AMQP Appender。