1.6 相较 1.5 的变化

测试支持

现在提供了一个新的测试支持库。有关更多信息,请参阅测试支持

构建器

现在提供了构建器,它们为配置 QueueExchange 对象提供了流畅的 API。有关更多信息,请参阅队列和交换器的构建器 API

命名空间更改

连接工厂

现在可以向连接工厂 bean 声明添加 thread-factory,例如,用于命名由 amqp-client 库创建的线程。有关更多信息,请参阅连接和资源管理

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

队列定义

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

侦听器容器的更改

空闲消息监听器检测

现在可以配置监听器容器,使其在空闲时发布 ApplicationEvent 实例。有关更多信息,请参阅检测空闲的异步消费者

队列不匹配检测

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

监听器容器日志记录

现在,监听器容器将其 beanName 提供给内部 SimpleAsyncTaskExecutor 作为 threadNamePrefix。这对于日志分析很有用。

默认错误处理器

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

AutoDeclareRabbitAdmin 实例

有关该选项在使用应用程序上下文中的 RabbitAdmin 实例时的一些语义更改,请参阅消息监听器容器配置autoDeclare)。

AmqpTemplate:带超时的接收

AmqpTemplate 及其 RabbitTemplate 实现引入了许多新的带 timeoutreceive() 方法。有关更多信息,请参阅轮询消费者

使用 AsyncRabbitTemplate

引入了一个新的 AsyncRabbitTemplate。此模板提供了许多发送和接收方法,其返回值是一个 ListenableFuture,以后可以同步或异步地获取结果。有关更多信息,请参阅异步 Rabbit 模板

RabbitTemplate 更改

1.4.1 引入了当 broker 支持时使用直接回复的功能。它比为每个回复使用临时队列更高效。此版本允许您通过将 useTemporaryReplyQueues 属性设置为 true 来覆盖此默认行为并使用临时队列。有关更多信息,请参阅RabbitMQ 直接回复

RabbitTemplate 现在支持 user-id-expression(使用 Java 配置时为 userIdExpression)。有关更多信息,请参阅Validated User-ID RabbitMQ 文档Validated User Id

消息属性

使用 CorrelationId

correlationId 消息属性现在可以是 String。有关更多信息,请参阅消息属性转换器

长字符串头

以前,DefaultMessagePropertiesConverter 将超过长字符串限制(默认 1024)的头“转换”为 DataInputStream(实际上,它引用了 LongString 实例的 DataInputStream)。在输出时,此头未转换(除了转换为 String,例如通过调用流上的 toString() 得到的 java.io.DataInputStream@1d057a39)。

在此版本中,长 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 更改

声明失败

以前,ignoreDeclarationFailures 标志仅对通道上的 IOException(例如不匹配的参数)生效。它现在对任何异常(例如 TimeoutException)生效。此外,每当声明失败时,都会发布一个 DeclarationExceptionEventRabbitAdmin 的最后一个声明事件也作为属性 lastDeclarationExceptionEvent 提供。有关更多信息,请参阅配置 Broker

@RabbitListener 的更改

每个 Bean 的多个容器

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

@SendTo SpEL 表达式

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

@QueueBinding 改进

现在可以在 @QueueBinding 注解中指定队列、交换器和绑定的参数。@QueueBinding 现在支持头部交换器。有关更多信息,请参阅注解驱动的监听器端点

延迟消息交换器

Spring AMQP 现在对 RabbitMQ 延迟消息交换器插件提供了第一类支持。有关更多信息,请参阅延迟消息交换器

交换器内部标志

任何 Exchange 定义现在都可以标记为 internal,并且 RabbitAdmin 在声明交换器时会将该值传递给 broker。有关更多信息,请参阅配置 Broker

CachingConnectionFactory 更改

CachingConnectionFactory 缓存统计信息

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

访问底层 RabbitMQ 连接工厂

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

通道缓存

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

此外,SimpleMessageListenerContainer 不再将缓存大小调整为至少与 concurrentConsumers 数量一样大 — 这在容器消费者通道从未缓存的情况下是多余的。

使用 RabbitConnectionFactoryBean

工厂 bean 现在公开了一个属性,用于向由结果工厂创建的连接添加客户端连接属性。

Java 反序列化

现在,在使用 Java 反序列化时,您可以配置允许的类的“允许列表”。如果您接受来自不受信任源的带有序列化 Java 对象的邮件,则应考虑创建允许列表。有关更多信息,请参阅 amqp/message-converters.adoc#java-deserialization[Java 反序列化]。

JSON MessageConverter

JSON 消息转换器的改进现在允许消费消息头中没有类型信息的邮件。有关更多信息,请参阅注解方法的邮件转换Jackson2JsonMessageConverter

日志记录 Appender

Log4j 2

已添加 Log4j 2 appender,并且 appender 现在可以使用 addresses 属性配置以连接到 broker 集群。

客户端连接属性

现在可以向 RabbitMQ 连接添加自定义客户端连接属性。

有关更多信息,请参阅日志记录子系统 AMQP Appender

© . This site is unofficial and not affiliated with VMware.