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 documentation和 Validated 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
)。此外,现在只要声明失败,就会发布 DeclarationExceptionEvent
。RabbitAdmin
上一个声明事件也可以作为属性 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
的数量一样大,这是多余的,因为容器客户机通道从未被缓存。
Java Deserialization
现在,在使用 Java 反序列化时,您可以配置允许类别的“允许列表”。如果您接受来自不受信任源的包含序列化 Java 对象的消息,则应考虑创建允许列表。有关详细信息,请参阅 Java Deserialization。
JSON MessageConverter
JSON 消息转换器的改进现在允许使用不具有消息头中类型信息的邮件。有关更多信息,请参阅 Message Conversion for Annotated Methods 和 [json-message-converter]。
Logging Appenders
Client Connection Properties
现在,您可以将自定义客户端连接属性添加到 RabbitMQ 连接中。
有关更多信息,请参见Logging Subsystem AMQP Appenders。