1.6 中自 1.5 以来的变化
测试支持
现在提供了新的测试支持库。 有关更多信息,请参阅测试支持。
架构工人
提供 Fluent API 以进行配置的生成器Queue
和Exchange
对象现在可用。
有关更多信息,请参阅适用于 Queues 和 Exchanges 的 Builder API。
命名空间更改
连接工厂
您现在可以添加thread-factory
到连接工厂 bean 声明中——例如,将线程命名为
由amqp-client
图书馆。
有关更多信息,请参阅连接和资源管理。
当您使用CacheMode.CONNECTION
,您现在可以限制允许的连接总数。
有关更多信息,请参阅连接和资源管理。
队列定义
您现在可以为匿名队列提供命名策略。
看AnonymousQueue
了解更多信息。
侦听器容器更改
空闲消息侦听器检测
您现在可以配置侦听器容器以发布ApplicationEvent
实例。
有关更多信息,请参阅 Detecting Idle Asynchronous Consumer。
不匹配队列检测
默认情况下,当侦听器容器启动时,如果检测到属性或参数不匹配的队列,
容器会记录异常,但会继续侦听。
容器现在具有一个名为mismatchedQueuesFatal
,这会阻止容器(和上下文)
如果在启动过程中检测到问题,则启动 Starting。
如果稍后检测到问题,例如从连接故障中恢复后,它还会停止容器。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。
默认错误处理程序
默认错误处理程序 (ConditionalRejectingErrorHandler
) 现在视为 Irrecoverable@RabbitListener
异常为 Fatal。
有关更多信息,请参阅异常处理。
AutoDeclare
和RabbitAdmin
实例
请参阅 消息侦听器容器配置 (autoDeclare
) 对该选项的语义进行一些更改,以便使用
之RabbitAdmin
实例。
AmqpTemplate
:超时接收
一些新的receive()
方法与timeout
已引入AmqpTemplate
及其RabbitTemplate
实现。
有关更多信息,请参阅轮询使用者。
用AsyncRabbitTemplate
新的AsyncRabbitTemplate
已引入。
此模板提供了许多发送和接收方法,其中返回值是ListenableFuture
,它可以
稍后用于同步或异步获取结果。
有关更多信息,请参阅 Async Rabbit Template 。
RabbitTemplate
变化
1.4.1 引入了在 broker 支持时使用 Direct reply-to 的功能。
这比对每个回复使用临时队列更有效。
此版本允许您覆盖此默认行为,并通过设置useTemporaryReplyQueues
property 设置为true
.
有关更多信息,请参阅 RabbitMQ Direct 回复。
这RabbitTemplate
现在支持user-id-expression
(userIdExpression
使用 Java 配置时)。
有关更多信息,请参阅经过验证的 User-ID RabbitMQ 文档和经过验证的用户 ID。
消息属性
用CorrelationId
这correlationId
message 属性现在可以是String
.
有关更多信息,请参阅 消息属性转换器 。
长字符串标头
以前,DefaultMessagePropertiesConverter
长度超过长字符串限制(默认为 1024)的 “converted” 标头
更改为DataInputStream
(实际上,它引用了LongString
实例的DataInputStream
).
在输出时,此标头未被转换(除了转换为 String — 例如java.io.DataInputStream@1d057a39
通过调用toString()
在溪流上)。
在此版本中,长LongString
实例现在保留为LongString
实例。
您可以使用getBytes[]
,toString()
或getStream()
方法。
一个大的传入LongString
现在也可以在输出上正确地 “转换” 。
有关更多信息,请参阅 消息属性转换器 。
入站配送模式
这deliveryMode
属性不再映射到MessageProperties.deliveryMode
.
如果相同的MessageProperties
object 用于发送出站消息。
相反,入站deliveryMode
header 映射到MessageProperties.receivedDeliveryMode
.
有关更多信息,请参阅 消息属性转换器 。
使用带注释的端点时,标头在名为AmqpHeaders.RECEIVED_DELIVERY_MODE
.
有关更多信息,请参阅带注释的端点方法签名。
入站用户 ID
这user_id
属性不再映射到MessageProperties.userId
.
如果相同的MessageProperties
object 用于发送出站消息。
相反,入站userId
header 映射到MessageProperties.receivedUserId
.
有关更多信息,请参阅 消息属性转换器 。
当您使用带注释的终端节点时,标头将在名为AmqpHeaders.RECEIVED_USER_ID
.
有关更多信息,请参阅带注释的端点方法签名。
RabbitAdmin
变化
声明失败
以前,ignoreDeclarationFailures
标志仅对IOException
在频道上(例如 Mis-Matched
参数)。
它现在对任何异常(例如TimeoutException
).
此外,一个DeclarationExceptionEvent
现在,每当声明失败时都会发布。
这RabbitAdmin
Last Declaration 事件也可用作属性lastDeclarationExceptionEvent
.
有关更多信息,请参阅 配置 Broker。
@RabbitListener
变化
每个 bean 的多个容器
当您使用 Java 8 或更高版本时,您现在可以添加多个@RabbitListener
annotations 添加到@Bean
类或
他们的方法。
使用 Java 7 或更早版本时,您可以使用@RabbitListeners
container 注解来提供相同的
功能性。
看@Repeatable
@RabbitListener
了解更多信息。
@SendTo
SPEL 表达式
@SendTo
对于没有replyTo
属性现在可以根据
请求/回复。
有关更多信息,请参阅回复管理。
@QueueBinding
改进
现在,您可以在@QueueBinding
附注。
标头交换现在由@QueueBinding
.
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。
延迟消息交换
Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件具有一流的支持。 有关更多信息,请参阅 Delayed Message Exchange。
Exchange 内部标志
任何Exchange
定义现在可以标记为internal
和RabbitAdmin
在以下情况下将值传递给代理
声明交易所。
有关更多信息,请参阅 配置 Broker。
CachingConnectionFactory
变化
CachingConnectionFactory
缓存统计
这CachingConnectionFactory
现在在运行时和 JMX 上提供缓存属性。
有关更多信息,请参阅 Runtime Cache Properties (运行时缓存属性)。
访问底层 RabbitMQ 连接工厂
添加了一个新的 getter 以提供对底层工厂的访问。 例如,您可以使用此 getter 来添加自定义连接属性。 有关更多信息,请参阅添加自定义客户端连接属性。
Channel Cache
默认通道缓存大小已从 1 增加到 25。 有关更多信息,请参阅连接和资源管理。
此外,SimpleMessageListenerContainer
不再将缓存大小调整为至少与数字一样大
之concurrentConsumers
— 这是多余的,因为容器使用者通道永远不会被缓存。
Java 反序列化
现在,您可以在使用 Java 反序列化时配置允许类的“允许列表”。 如果您接受包含来自 untrusted sources 的 untrusted sources。 有关更多信息,请参见 amqp/message-converters.adoc#java-deserialization[Java Deserialization]。
JSON 格式MessageConverter
对 JSON 消息转换器的改进现在允许使用没有类型信息的消息
在消息标头中。
请参阅 带注释的方法的消息转换 和Jackson2JsonMessageConverter
了解更多信息。