1.6 版本相较于 1.5 版本的变更

测试支持

现在提供了一个新的测试支持库。测试支持以获取更多信息。spring-doc.cadn.net.cn

构建器

提供流畅 API 用于配置 QueueExchange 对象的构建器现已可用。有关更多信息,请参阅 队列和交换机的构建器 APIspring-doc.cadn.net.cn

命名空间变更

连接工厂

现在,您可以在连接工厂 Bean 声明中添加 thread-factory —— 例如,用于命名由 amqp-client 库创建的线程。连接与资源管理 获取更多信息。spring-doc.cadn.net.cn

当你使用 CacheMode.CONNECTION 时,现在可以限制允许的总连接数。连接与资源管理 以获取更多信息。spring-doc.cadn.net.cn

队列定义

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

监听器容器变更

空闲消息监听器检测

现在,您可以配置监听器容器,在空闲时发布 ApplicationEvent 个实例。有关更多信息,请参阅 检测空闲异步消费者spring-doc.cadn.net.cn

队列不匹配检测

默认情况下,当监听器容器启动时,如果检测到队列的属性或参数不匹配,容器会记录异常但继续监听。现在,容器增加了一个名为 mismatchedQueuesFatal 的属性,该属性可在启动期间检测到此类问题时阻止容器(以及上下文)启动。此外,若在后续阶段(例如在从连接故障中恢复后)检测到此类问题,该属性也会停止容器运行。有关更多信息,请参阅 消息监听器容器配置spring-doc.cadn.net.cn

监听器容器日志

现在,监听器容器将其 beanName 提供给内部的 SimpleAsyncTaskExecutor 作为 threadNamePrefix。这有助于日志分析。spring-doc.cadn.net.cn

默认错误处理器

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

AutoDeclareRabbitAdmin实例

参见 消息监听容器配置autoDeclare)以了解该选项语义的一些变更,这些变更与应用程序上下文中使用 RabbitAdmin 实例相关。spring-doc.cadn.net.cn

AmqpTemplate: 带超时的接收

引入了若干新的 receive() 方法,这些方法与 timeout 相关,适用于 AmqpTemplate 及其 RabbitTemplate 实现类。有关更多信息,请参阅 轮询消费者(Polling Consumer)spring-doc.cadn.net.cn

使用AsyncRabbitTemplate

已引入一个新的 AsyncRabbitTemplate
此模板提供多种发送和接收方法,其返回值为 ListenableFuture,可用于稍后以同步或异步方式获取结果。
有关更多信息,请参阅 异步 Rabbit 模板spring-doc.cadn.net.cn

RabbitTemplate变更

1.4.1 版本引入了在代理支持的情况下直接使用 回复地址(reply-to) 的能力。
与为每个回复分别使用临时队列相比,这种方式更高效。
此版本允许您覆盖该默认行为,通过将 useTemporaryReplyQueues 属性设置为 true 来使用临时队列。
有关更多信息,请参见 RabbitMQ 直接回复地址spring-doc.cadn.net.cn

The RabbitTemplate now supports a user-id-expression (userIdExpression when using Java configuration). See Validated User-ID RabbitMQ documentation and Validated User Id for more information.spring-doc.cadn.net.cn

消息属性

使用CorrelationId

消息属性 correlationId 现在可以是 String。有关更多信息,请参阅 消息属性转换器spring-doc.cadn.net.cn

长字符串标题

之前,DefaultMessagePropertiesConverter“转换”了长度超过长字符串限制(默认为1024)的头字段,将其转换为DataInputStream(实际上,它引用了LongString实例的DataInputStream)。在输出时,该头字段未被转换(仅转换为字符串——例如,通过调用java.io.DataInputStream@1d057a39在流上执行toString()来实现)。spring-doc.cadn.net.cn

在此版本中,长 LongString 实例现在默认仍保留为 LongString 实例。您可以通过使用 getBytes[]toString()getStream() 方法访问其内容。大型传入的 LongString 现在在输出时也正确地“转换”了。spring-doc.cadn.net.cn

请参阅 消息属性转换器 以获取更多信息。spring-doc.cadn.net.cn

入库配送模式

属性 deliveryMode 已不再映射到 MessageProperties.deliveryMode。此更改可避免在使用同一 MessageProperties 对象发送出站消息时发生意外传播。相反,入站 deliveryMode 头部被映射到 MessageProperties.receivedDeliveryModespring-doc.cadn.net.cn

请参阅 消息属性转换器 以获取更多信息。spring-doc.cadn.net.cn

在使用注解端点时,标头以名为 AmqpHeaders.RECEIVED_DELIVERY_MODE 的标头提供。spring-doc.cadn.net.cn

请参阅 带注解的端点方法签名 以获取更多信息。spring-doc.cadn.net.cn

入站用户ID

属性 user_id 已不再映射到 MessageProperties.userId。此更改可避免在使用同一 MessageProperties 对象发送出站消息时发生意外传播。相反,入站 userId 头部被映射到 MessageProperties.receivedUserIdspring-doc.cadn.net.cn

请参阅 消息属性转换器 以获取更多信息。spring-doc.cadn.net.cn

当你使用注解端点时,标头会以名为 AmqpHeaders.RECEIVED_USER_ID 的标头提供。spring-doc.cadn.net.cn

请参阅 带注解的端点方法签名 以获取更多信息。spring-doc.cadn.net.cn

RabbitAdmin变更

声明失败

之前,ignoreDeclarationFailures 标志仅在通道(如参数不匹配)上对 IOException 生效。现在,它对任何异常(如 TimeoutException)均生效。此外,每当声明失败时,现在都会发布一个 DeclarationExceptionEvent。最后的声明事件 RabbitAdmin 也可作为属性 lastDeclarationExceptionEvent 获取。有关更多信息,请参阅 配置代理spring-doc.cadn.net.cn

@RabbitListener变更

每个Bean的多个容器

当您使用 Java 8 或更高版本时,现在可以向 @RabbitListener 类或其方法上添加多个 @Bean 注解。在使用 Java 7 或更早版本时,您可以使用 @RabbitListeners 容器注解来提供相同的功能。有关更多信息,请参阅 @Repeatable @RabbitListenerspring-doc.cadn.net.cn

@SendToSpEL 表达式

@SendTo 用于路由回复,当没有 replyTo 属性时,现在可以作为 SpEL 表达式在请求/回复上下文中进行求值。有关更多信息,请参阅 回复管理spring-doc.cadn.net.cn

@QueueBinding改进

现在,您可以在 @QueueBinding 注解中为队列、交换机和绑定指定参数。
头交换机现已由 @QueueBinding 支持。
有关更多信息,请参阅 注解驱动的监听器端点spring-doc.cadn.net.cn

延迟消息交换

Spring AMQP 现在已对 RabbitMQ 延迟消息交换插件提供第一类支持。有关更多信息,请参阅 延迟消息交换spring-doc.cadn.net.cn

交换内部标志

任何 Exchange 定义现在都可以标记为 internal,并且 RabbitAdmin 在声明交换器时将该值传递给代理服务器。有关更多信息,请参阅 配置代理服务器spring-doc.cadn.net.cn

CachingConnectionFactory变更

CachingConnectionFactory缓存统计

CachingConnectionFactory 现在可在运行时提供缓存属性,并通过 JMX 进行访问。
有关更多信息,请参阅 运行时缓存属性spring-doc.cadn.net.cn

访问底层的 RabbitMQ 连接工厂

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

频道缓存

默认通道缓存大小已从 1 增加到 25。连接与资源管理 了解更多信息。spring-doc.cadn.net.cn

此外,SimpleMessageListenerContainer 不再将缓存大小调整为至少等于 concurrentConsumers 的数量——这是多余的,因为容器消费者通道永远不会被缓存。spring-doc.cadn.net.cn

使用RabbitConnectionFactoryBean

工厂bean现在提供了一个属性,用于向由该工厂生成的连接添加客户端连接属性。spring-doc.cadn.net.cn

Java 反序列化

现在,您可以在使用 Java 反序列化时配置一个“允许列表”,以指定可接受的类。如果您从不可信源接收包含已序列化 Java 对象的消息,则应考虑创建一个允许列表。有关更多详情,请参阅 amqp/message-converters.adoc#java-deserialization[Java 反序列化]。spring-doc.cadn.net.cn

JSONMessageConverter

对 JSON 消息转换器的改进现在允许处理消息头中不包含类型信息的消息。
有关更多信息,请参阅 带注解方法的消息转换Jackson2JsonMessageConverterspring-doc.cadn.net.cn

日志记录器追加器

Log4j2

A log4j 2 appender 已被添加,现在可以通过 addresses 属性配置这些 appender 以连接到 broker 集群。spring-doc.cadn.net.cn

客户端连接属性

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

请参阅 日志子系统 AMQP Appender 以获取更多信息。spring-doc.cadn.net.cn