Changes in 1.6 Since 1.5

  • 为配置队列和交换对象提供流畅 API 的构建器。

  • 支持匿名队列的命名策略。

  • 侦听器容器支持在空闲时发布事件。

  • 默认错误处理程序将无法恢复的异常视为致命问题。

  • 使用 RabbitAdmin 实例时自动声明语义的更改。

  • AmqpTemplate 支持具有超时接收的新方法。

  • 引入 AsyncRabbitTemplate 以异步发送和接收消息。

Testing Support

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

Builder

现在提供了针对 `Queue`和 `Exchange`对象提供流畅 API 的构建器。有关更多信息,请参见 Builder API for Queues and Exchanges

Namespace Changes

Connection Factory

现在可以将 `thread-factory`添加到连接工厂 bean 声明中——例如,为 `amqp-client`库创建的线程命名。有关更多信息,请参阅 Connection and Resource Management

当使用 `CacheMode.CONNECTION`时,现在可以限制允许的最大连接数。有关更多信息,请参阅 Connection and Resource Management

Queue Definitions

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

Listener Container Changes

Idle Message Listener Detection

现在可以配置监听容器,以便在空闲时发布 `ApplicationEvent`实例。有关更多信息,请参阅 Detecting Idle Asynchronous Consumers

Mismatched Queue Detection

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

Listener Container Logging

现在,侦听器容器将它的 beanName 作为 threadNamePrefix 提供给内部 SimpleAsyncTaskExecutor。这有助于日志分析。

Default Error Handler

默认错误处理程序 (ConditionalRejectingErrorHandler) 现在将无法恢复的 `@RabbitListener`异常视为致命错误。有关更多信息,请参阅 Exception Handling

AutoDeclare and RabbitAdmin Instances

有关该选项的语义在应用程序上下文中使用 RabbitAdmin`实例方面的一些更改,请参阅 Message Listener Container Configuration(`autoDeclare)。

AmqpTemplate: Receive with Timeout

引入了许多新的具有 `timeout`的 `receive()`方法,用于 `AmqpTemplate`及其 `RabbitTemplate`实现。有关更多信息,请参阅 Polling Consumer

Using AsyncRabbitTemplate

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

RabbitTemplate Changes

1.4.1 引入了在代理支持的情况下使用 direct reply-to的能力。它比为每个回复使用临时队列更高效。这个版本允许您覆盖此默认行为并通过将 `useTemporaryReplyQueues`属性设置为 `true`来使用临时队列。有关更多信息,请参见 RabbitMQ Direct reply-to

RabbitTemplate`现在支持`user-id-expression(在使用 Java 配置时的 userIdExpression)。有关详细信息,请参见 Validated User-ID RabbitMQ documentationValidated User Id

Message Properties

Using CorrelationId

correlationId`消息属性现在可以是`String。有关详细信息,请参见 Message Properties Converters

Long String Headers

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

在此版本中,较大的 LongString 实例现在默认情况下保留为 LongString 实例。您可以使用 getBytes[]toString()getStream() 方法访问内容。现在,较大的传入 LongString 在输出时也正确地 “converted”。

有关详细信息,请参见 Message Properties Converters

Inbound Delivery Mode

deliveryMode 属性不再映射到 MessageProperties.deliveryMode。如果将相同的 MessageProperties 对象用于发送出站消息,此更改可避免意外传播。而是将入站 deliveryMode 标头映射到 MessageProperties.receivedDeliveryMode

有关详细信息,请参见 Message Properties Converters

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

有关更多信息,请参阅 Annotated Endpoint Method Signature

Inbound User ID

user_id 属性不再映射到 MessageProperties.userId。如果将相同的 MessageProperties 对象用于发送出站消息,此更改可避免意外传播。而是将入站 userId 标头映射到 MessageProperties.receivedUserId

有关详细信息,请参见 Message Properties Converters

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

有关更多信息,请参阅 Annotated Endpoint Method Signature

RabbitAdmin Changes

Declaration Failures

以前,ignoreDeclarationFailures 标志仅对频道的 IOException 产生影响(例如错误匹配的参数)。现在,它对任何异常都有效(例如 TimeoutException)。此外,现在只要声明失败,就会发布 DeclarationExceptionEventRabbitAdmin 上一个声明事件也可以作为属性 lastDeclarationExceptionEvent 获取。有关更多信息,请参阅 Configuring the Broker

@RabbitListener Changes

Multiple Containers for Each Bean

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

@SendTo SpEL Expressions

没有 replyTo 属性的路由回复的 @SendTo 现在可以是针对请求或回复计算的 SpEL 表达式。有关更多信息,请参阅 Reply Management

@QueueBinding Improvements

现在,您可以在 @QueueBinding 注释中指定队列、交换和绑定的参数。现在,@QueueBinding 支持标头交换。有关更多信息,请参阅 Annotation-driven Listener Endpoints

Delayed Message Exchange

Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件提供了重要的支持。有关更多信息,请参阅 Delayed Message Exchange

Exchange Internal Flag

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

CachingConnectionFactory Changes

CachingConnectionFactory Cache Statistics

`CachingConnectionFactory`现在在运行时和 JMX 中提供缓存属性。有关详细信息,请参见 Runtime Cache Properties

Accessing the Underlying RabbitMQ Connection Factory

现在添加了新的 getter 以提供对底层工厂的访问权限。例如,您可以使用此 getter 添加自定义的连接属性。有关更多信息,请参阅 Adding Custom Client Connection Properties

Channel Cache

默认的频道缓存大小已从 1 增加到 25。有关更多信息,请参阅 Connection and Resource Management

此外,SimpleMessageListenerContainer 不再调整缓存大小以至少与 concurrentConsumers 的数量一样大,这是多余的,因为容器客户机通道从未被缓存。

Using RabbitConnectionFactoryBean

现在,工厂 bean 公开了一个属性,用于向生成的工厂连接添加客户端连接属性。

Java Deserialization

现在,在使用 Java 反序列化时,您可以配置允许类别的“允许列表”。如果您接受来自不受信任源的包含序列化 Java 对象的消息,则应考虑创建允许列表。有关详细信息,请参阅 Java Deserialization

JSON MessageConverter

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

Logging Appenders

Log4j 2

已添加一个 log4j 2 附加设备,现在可以使用 addresses 属性将附加设备配置为连接到代理程序集群。

Client Connection Properties

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

有关更多信息,请参见Logging Subsystem AMQP Appenders