附录 A:更改历史
本节介绍版本更改时所做的更改。
A.1. 当前版本
查看新增功能。
A.2. 以前的版本
A.2.1. 自 2.2 以来 2.3 的变化
本节介绍 2.2 版和 2.3 版之间的更改。 有关先前版本中的更改,请参阅更改历史记录。
连接工厂更改
现在提供了两个额外的连接工厂。 有关详细信息,请参阅选择连接工厂。
@RabbitListener变化
现在可以指定回复内容类型。 有关详细信息,请参阅回复 ContentType。
消息转换器更改
这Jackson2JMessageConverters 现在可以反序列化抽象类(包括接口),如果ObjectMapper配置了自定义解串器。
有关详细信息,请参阅反序列化抽象类。
测试更改
新注释@SpringRabbitTest用于在您不使用SpringBootTest.
有关详细信息,请参阅@SpringRabbitTest。
RabbitTemplate 更改
模板的ReturnCallback已重构为ReturnsCallback以便在 lambda 表达式中更简单地使用。
有关详细信息,请参阅相关发布者确认和退货。
使用退货和相关确认时,CorrelationData现在需要一个唯一的id财产。
有关详细信息,请参阅相关发布者确认和退货。
使用直接回复时,您现在可以配置模板,以便服务器不需要返回与回复的关联数据。 有关更多信息,请参阅 RabbitMQ 直接回复。
侦听器容器更改
新的侦听器容器属性consumeDelay现已上市;它在使用 RabbitMQ 分片插件时很有帮助。
默认值JavaLangErrorHandler现在调用System.exit(99).
要恢复到以前的行为(不执行任何作),请添加一个无作处理程序。
容器现在支持globalQos属性来应用prefetchCount全局,而不是渠道上的每个使用者。
有关详细信息,请参阅消息侦听器容器配置。
MessagePostProcessor 更改
压缩MessagePostProcessors 现在使用逗号而不是冒号来分隔多个内容编码。
解压缩器可以处理这两种格式,但是,如果您使用此版本生成的消息被 2.2.12 之前的版本使用,则应将压缩器配置为使用旧分隔符。
有关更多信息,请参阅修改消息 - 压缩等中的重要说明。
多个代理支持改进
有关更多信息,请参阅多代理(或集群)支持。
RepublishMessageRecoverer 更改
未提供此恢复器的新子类来支持发布者确认。 有关详细信息,请参阅消息侦听器和异步案例。
A.2.2. 自 2.1 以来 2.2 的变化
本节介绍 2.1 版和 2.2 版之间的更改。
包更改
以下类/接口已从org.springframework.amqp.rabbit.core.support自org.springframework.amqp.rabbit.batch:
- 
BatchingStrategy - 
MessageBatch - 
SimpleBatchingStrategy 
另外ListenerExecutionFailedException已从org.springframework.amqp.rabbit.listener.exception自org.springframework.amqp.rabbit.support.
依赖项更改
JUnit (4) 现在是一个可选的依赖项,将不再显示为传递依赖项。
这spring-rabbit-junit模块现在是spring-rabbit-test模块,以便在只有单个spring-rabbit-test我们获得了 AMQP 组件的完整测试实用程序堆栈。
“重大”API 更改
JUnit (5)RabbitAvailableCondition.getBrokerRunning()现在返回一个BrokerRunningSupport实例而不是BrokerRunning,这取决于 JUnit 4。
它具有相同的 API,因此只需更改任何引用的类名即可。
有关更多信息,请参阅 JUnit5 条件。
ListenerContainer 更改
默认情况下,具有致命异常的消息现在会被拒绝并且不会重新排队,即使确认模式是手动的也是如此。 有关详细信息,请参阅异常处理。
现在可以使用 Micrometer 监控监听器性能Timers.
有关详细信息,请参阅监视侦听器性能。
@RabbitListener变化
您现在可以配置executor,覆盖出厂配置,以便更轻松地识别与侦听器关联的线程。
您现在可以覆盖容器工厂的acknowledgeMode属性替换为注释的ackMode财产。
有关更多信息,请参阅覆盖容器工厂属性。
使用批处理时,@RabbitListener方法现在可以在一次调用中接收完整的一批消息,而不是一次获取一条消息。
当一次接收一条批处理消息时,最后一条消息具有isLastInBatchmessage 属性设置为 true。
此外,收到的批处理消息现在包含amqp_batchSize页眉。
侦听器还可以使用SimpleMessageListenerContainer,即使批次不是由生产者创建的。
有关详细信息,请参阅选择容器。
Spring Data Projection 接口现在受Jackson2JsonMessageConverter.
有关更多信息,请参阅使用 Spring Data Projection 接口。
这Jackson2JsonMessageConverter如果没有contentType属性,或者它是默认值 (application/octet-string).
看从Message了解更多信息。
同样地。这Jackson2XmlMessageConverter现在假设内容是 XML,如果没有contentType属性,或者它是默认值 (application/octet-string).
看Jackson2XmlMessageConverter了解更多信息。
当@RabbitListener方法返回一个结果,bean 和Method现在在回复消息属性中可用。
这允许配置beforeSendReplyMessagePostProcessor例如,在回复中设置一个标头,以指示在服务器上调用了哪个方法。
有关更多信息,请参阅回复管理。
您现在可以配置ReplyPostProcessor在发送回复消息之前对其进行修改。
有关更多信息,请参阅回复管理。
AMQP 日志记录附加器更改
Log4J 和 LogbackAmqpAppenders 现在支持verifyHostnameSSL 选项。
此外,现在可以将这些附加器配置为不将 MDC 条目添加为标头。
这addMdcAsHeaders引入了 boolean 选项来配置此类行为。
附加器现在支持SaslConfig财产。
有关更多信息,请参阅日志记录子系统 AMQP 附加器。
MessageListenerAdapter 更改
这MessageListenerAdapter现在提供新的buildListenerArguments(Object, Channel, Message)方法来构建要传递给目标侦听器的参数数组,并且旧的参数已被弃用。
看MessageListenerAdapter了解更多信息。
交换/队列声明更改
这ExchangeBuilder和QueueBuilder用于创建 Fluent APIExchange和Queue用于声明的对象RabbitAdmin现在支持“众所周知”的论点。
有关更多信息,请参阅队列和交换的构建器 API。
这RabbitAdmin有一个新属性explicitDeclarationsOnly.
有关详细信息,请参阅条件声明。
连接工厂更改
这CachingConnectionFactory有一个新属性shuffleAddresses.
当提供代理节点地址列表时,将在创建连接之前对列表进行打乱,以便尝试连接的顺序是随机的。
有关更多信息,请参阅连接到集群。
使用 Publisher 确认并返回时,现在在连接工厂的executor.
这避免了amqp-clients库,如果从回调中执行 rabbit作。
有关详细信息,请参阅相关发布者确认和退货。
此外,发布者确认类型现在使用ConfirmTypeenum 而不是两个互斥的 setter 方法。
这RabbitConnectionFactoryBean现在,启用 SSL 时默认使用 TLS 1.2。
看RabbitConnectionFactoryBean和配置 SSL了解更多信息。
新的 MessagePostProcessor 类
类DeflaterPostProcessor和InflaterPostProcessor添加了,以分别支持压缩和解压缩,当消息内容编码设置为deflate.
其他变化
这Declarables对象(用于声明多个队列、交换、绑定)现在为每种类型都有一个过滤的 getter。
有关详细信息,请参阅声明交换、队列和绑定的集合。
您现在可以自定义每个Declarablebean 之前的RabbitAdmin处理其声明。
有关详细信息,请参阅自动声明交换、队列和绑定。
singleActiveConsumer()已添加到QueueBuilder将x-single-active-consumerqueue 参数。
有关更多信息,请参阅队列和交换的构建器 API。
值类型为Class<?>现在使用getName()而不是toString().
有关详细信息,请参阅消息属性转换器。
现在支持恢复失败的生产者创建的批处理。有关更多信息,请参阅使用批处理侦听器重试。
A.2.3. 自 2.0 以来 2.1 的变化
AMQP 客户端库
Spring AMQP 现在使用 5.4.x 版本的amqp-clientRabbitMQ 团队提供的库。该客户端默认配置了自动恢复。参见 RabbitMQ 自动连接/拓扑恢复。
从 4.0 版本开始,客户端默认启用自动恢复。虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。我们建议禁用amqp-client自动恢复,避免获得AutoRecoverConnectionNotCurrentlyOpenException代理可用但连接尚未恢复的情况。
从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给CachingConnectionFactory.
兔子MQConnectionFactory由RabbitConnectionFactoryBean默认情况下,还禁用该选项。 | 
包更改
某些类已移至不同的包。
大多数是内部类,不会影响用户应用程序。
两个例外是ChannelAwareMessageListener和RabbitListenerErrorHandler.
这些接口现在位于org.springframework.amqp.rabbit.listener.api.
发布者确认更改
当有未完成的确认时,为发布者确认启用的通道不会返回到缓存中。 有关详细信息,请参阅相关发布者确认和退货。
侦听器容器工厂改进
您现在可以使用侦听器容器工厂创建任何侦听器容器,而不仅仅是用于@RabbitListener注释或@RabbitListenerEndpointRegistry.
有关更多信息,请参阅使用容器工厂。
ChannelAwareMessageListener现在继承自MessageListener.
代理事件侦听器
一个BrokerEventListener引入以将选定的代理事件发布为ApplicationEvent实例。
有关更多信息,请参阅代理事件侦听器。
RabbitAdmin 更改
这RabbitAdmin发现类型Declarables(这是一个容器Declarable - Queue,Exchange和Bindingobjects),并在代理上声明包含的对象。
不鼓励用户使用旧的声明机制<Collection<Queue>>(和其他)并且应该使用Declarables豆子代替。
默认情况下,旧机制处于禁用状态。
有关详细信息,请参阅声明交换、队列和绑定的集合。
AnonymousQueue实例现在使用x-queue-master-locator设置为client-local默认情况下,确保在应用程序连接到的节点上创建队列。
有关更多信息,请参阅配置代理。
RabbitTemplate 更改
您现在可以配置RabbitTemplate使用noLocalReplyConsumer控制noLocal标记sendAndReceive()操作。
有关详细信息,请参阅请求/回复消息。
CorrelationData对于发布商确认,现在有一个ListenableFuture,您可以使用它来获取确认,而不是使用回调。
启用返回和确认后,将使用返回的消息填充相关数据(如果提供)。
有关详细信息,请参阅相关发布者确认和退货。
一个名为replyTimedOut现在提供以通知子类回复已超时,从而允许任何状态清理。
有关更多信息,请参阅回复超时。
您现在可以指定ErrorHandler将请求/回复与DirectReplyToMessageListenerContainer(默认值)当传递回复时发生异常(例如,延迟回复)。
看setReplyErrorHandler在RabbitTemplate.
(也是从 2.0.11 开始)。
消息转换
我们引入了一个新的Jackson2XmlMessageConverter以支持将消息从 XML 格式转换到 XML 格式。
看Jackson2XmlMessageConverter了解更多信息。
管理 REST API
这RabbitManagementTemplate现在已弃用,取而代之的是直接com.rabbitmq.http.client.Client(或com.rabbitmq.http.client.ReactorNettyClient) 用法。
有关更多信息,请参阅 RabbitMQ REST API。
@RabbitListener变化
侦听器容器工厂现在可以配置RetryTemplate以及(可选)一个RecoveryCallback发送回复时使用。
有关更多信息,请参阅启用侦听器端点注释。
异步@RabbitListener返回
@RabbitListener方法现在可以返回ListenableFuture<?>或Mono<?>.
看异步@RabbitListener返回类型了解更多信息。
连接工厂 Bean 更改
默认情况下,RabbitConnectionFactoryBean现在调用enableHostnameVerification().
要恢复到以前的行为,请将enableHostnameVerification属性设置为false.
连接工厂更改
这CachingConnectionFactory现在无条件禁用底层 RabbitMQ 中的自动恢复ConnectionFactory,即使构造函数中提供了预配置的实例。
虽然已经采取措施使 Spring AMQP 与自动恢复兼容,但出现了某些极端情况,其中问题仍然存在。
Spring AMQP 从 1.0.0 开始就有了自己的恢复机制,不需要使用客户端提供的恢复。
虽然仍然可以启用该功能(使用cachingConnectionFactory.getRabbitConnectionFactory() .setAutomaticRecoveryEnabled()) 在CachingConnectionFactory,我们强烈建议您不要这样做。
建议使用单独的 RabbitMQConnectionFactory如果您在直接使用客户端工厂(而不是使用 Spring AMQP 组件)时需要自动恢复连接。
侦听器容器更改
默认值ConditionalRejectingErrorHandler现在完全丢弃导致致命错误的消息,如果x-deathheader 存在。
有关详细信息,请参阅异常处理。
立即重新排队
一个新的ImmediateRequeueAmqpException引入来通知侦听器容器必须将消息重新排队。要使用此功能,新的ImmediateRequeueMessageRecoverer实现。
有关详细信息,请参阅消息侦听器和异步案例。
A.2.4. 自 1.7 以来 2.0 的变化
用CachingConnectionFactory
从 2.0.2 版开始,您可以配置RabbitTemplate使用与侦听器容器使用的连接不同的连接。
此更改可避免在生产者因任何原因被阻止时死锁的使用者。
有关详细信息,请参阅使用单独的连接。
AMQP 客户端库
Spring AMQP 现在使用新的 5.0.x 版本的amqp-clientRabbitMQ 团队提供的库。
默认情况下,此客户端配置了自动恢复。
请参见 RabbitMQ 自动连接/拓扑恢复。
从 4.0 版开始,客户端默认启用自动恢复。
虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。
我们建议您禁用amqp-client自动恢复,避免获得AutoRecoverConnectionNotCurrentlyOpenException代理可用但连接尚未恢复的情况。
从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给CachingConnectionFactory.
兔子MQConnectionFactory由RabbitConnectionFactoryBean默认情况下,还禁用该选项。 | 
一般更改
这ExchangeBuilder现在默认构建持久交换。
这@Exchange注释@QeueueBinding默认情况下还声明持久交换。
这@Queue注释@RabbitListener默认情况下,如果命名,则声明持久队列,如果匿名,则声明非持久队列。
有关更多信息,请参阅队列和交换的构建器 API 和注释驱动的侦听器端点。
已删除的类
UniquelyNameQueue不再提供。
创建具有唯一名称的持久非自动删除队列是不寻常的。
该类已被删除。
如果您需要其功能,请使用new Queue(UUID.randomUUID().toString()).
Log4j 附加器
由于 log4j 的生命周期结束,此附加器不再可用。有关可用日志附加器的信息,请参阅日志记录子系统 AMQP 附加器。
RabbitTemplate变化
以前,非事务性RabbitTemplate如果现有事务在事务侦听器容器线程上运行,则参与了该事务。这是一个严重的错误。但是,用户可能依赖于此行为。从版本 1.6.2 开始,您必须将channelTransactedboolean 以使其参与容器事务。 | 
这RabbitTemplate现在使用DirectReplyToMessageListenerContainer(默认情况下),而不是为每个请求创建一个新的使用者。有关更多信息,请参阅 RabbitMQ 直接回复。
这AsyncRabbitTemplate现在支持直接回复。有关更多信息,请参阅异步兔子模板。
这RabbitTemplate和AsyncRabbitTemplate现在有receiveAndConvert和convertSendAndReceiveAsType采用ParameterizedTypeReference<T>参数,让调用者指定要将结果转换为的类型。这对于复杂类型或未在消息头中传达类型信息时特别有用。它需要一个SmartMessageConverter例如Jackson2JsonMessageConverter.
请参阅接收消息、请求/回复消息、异步兔模板和从Message跟RabbitTemplate了解更多信息。
您现在可以使用RabbitTemplate在专用通道上执行多个作。
有关详细信息,请参阅作用域作。
侦听器适配器
一个方便的FunctionalInterface可用于将 lambda 与MessageListenerAdapter.
看MessageListenerAdapter了解更多信息。
侦听器容器更改
预取默认值(Prefetch Default Value)
预取默认值过去为 1,这可能导致高效使用者的利用率不足。 默认预取值现在为 250,这应该会让消费者在大多数常见场景中保持忙碌,并且, 因此,提高吞吐量。
| 在某些情况下,预提取值应 be low — 例如,对于大消息,尤其是在处理速度较慢的情况下(消息可能会加起来 到客户端进程中的大量内存),以及是否需要严格的消息排序 (在这种情况下,预取值应设置回 1)。 此外,对于低容量消息传递和多个使用者(包括单个侦听器容器实例中的并发性),您可能希望减少预取,以便在使用者之间获得更均匀的消息分布。 | 
有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中消费者利用率的文章和这篇关于排队理论的文章。
消息计数
以前MessageProperties.getMessageCount()返回0用于容器发出的消息。
此属性仅适用于使用basicGet(例如,从RabbitTemplate.receive()方法),现在初始化为null用于容器消息。
事务回滚行为
事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关更多信息,请参阅有关回滚已接收消息的说明。
关机行为
如果容器线程在shutdownTimeout,则通道默认强制关闭。
有关详细信息,请参阅消息侦听器容器配置。
连接工厂更改
连接和通道侦听器接口现在提供了一种获取有关异常的信息的机制。 有关详细信息,请参阅连接和通道侦听器和发布是异步的 — 如何检测成功和失败。
一个新的ConnectionNameStrategy现在提供了从AbstractConnectionFactory.
有关详细信息,请参阅连接和资源管理。
重试更改
这MissingMessageIdAdvice不再提供。
它的功能现在是内置的。
有关详细信息,请参阅同步作中的失败和重试选项。
匿名队列命名
默认情况下,AnonymousQueues现在使用默认的Base64UrlNamingStrategy而不是简单的UUID字符串。
看AnonymousQueue了解更多信息。
@RabbitListener变化
您现在可以在@RabbitListener附注。
有关更多信息,请参阅注释驱动的侦听器端点。
您现在可以配置@RabbitListener注释,以便将任何异常返回给发送方。
您还可以配置RabbitListenerErrorHandler处理异常。
有关详细信息,请参阅处理异常。
现在,当您使用@QueueBinding注解。
也@QueueBinding.exchange()现在支持自定义交换类型,并默认声明持久交换。
现在,您可以将concurrency在注释级别的侦听器容器,而不必为不同的并发设置配置不同的容器工厂。
现在,您可以将autoStartup属性,覆盖容器工厂中的默认设置。
现在可以设置接收后和发送(回复)前MessagePostProcessor实例中的RabbitListener集装箱工厂。
有关更多信息,请参阅注释驱动的侦听器端点。
从 2.0.3 版本开始,其中一个@RabbitHandler类级别的注释@RabbitListener可以指定为默认值。
有关更多信息,请参阅多方法侦听器。
容器条件回滚
使用外部事务管理器(例如 JDBC)时,当您向容器提供事务属性时,现在支持基于规则的回滚。 当您使用交易建议时,它现在也更加灵活。 有关更多信息,请参阅条件回滚。
删除 Jackson 1.x 支持
在以前的版本中已弃用,Jackson1.x转换器和相关组件现已被删除。
您可以使用基于 Jackson 2.x 的类似组件。
有关详细信息,请参阅 Jackson2JsonMessageConverter。
JSON 消息转换器
当TypeId设置为Hashtable对于入站 JSON 消息,默认转换类型现在为LinkedHashMap.
以前,它是Hashtable.
要恢复到Hashtable,您可以使用setDefaultMapType在DefaultClassMapper.
XML 解析器
解析时Queue和ExchangeXML 组件时,解析器不再注册name属性值作为 Bean 别名,如果id属性存在。 看关于id和name属性了解更多信息。
被阻止的连接
您现在可以注入com.rabbitmq.client.BlockedListener进入org.springframework.amqp.rabbit.connection.Connection对象。 此外,ConnectionBlockedEvent和ConnectionUnblockedEvent事件由ConnectionFactory当连接被 Broker 阻止或取消阻止时。
有关详细信息,请参阅连接和资源管理。
A.2.5. 1.7 自 1.6 以来的变化
AMQP 客户端库
Spring AMQP 现在使用新的 4.0.x 版本的amqp-clientRabbitMQ 团队提供的库。该客户端默认配置了自动恢复。参见 RabbitMQ 自动连接/拓扑恢复。
默认情况下,4.0.x 客户端启用自动恢复。
虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。
我们建议禁用amqp-client自动恢复,避免获得AutoRecoverConnectionNotCurrentlyOpenException代理可用但连接尚未恢复的情况。
从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给CachingConnectionFactory.
兔子MQConnectionFactory由RabbitConnectionFactoryBean默认情况下,还禁用该选项。 | 
Log4j 2 升级
最低 Log4j 2 版本(对于AmqpAppender) 现在是2.7.
该框架不再与以前的版本兼容。
有关更多信息,请参阅日志记录子系统 AMQP 附加器。
Logback Appender
默认情况下,此附加器不再捕获调用方数据(方法、行号)。
您可以通过将includeCallerData配置选项。
有关可用日志附加器的信息,请参阅日志记录子系统 AMQP 附加器。
Spring 重试升级
最低的 Spring Retry 版本现在是1.2.
该框架不再与以前的版本兼容。
关机行为
您现在可以设置forceCloseChannel自true因此,如果容器线程在shutdownTimeout,通道被强制关闭,
导致任何未确认的消息重新排队。
有关详细信息,请参阅消息侦听器容器配置。
JUnit@Rules
以前由框架内部使用的规则现在可以在一个名为spring-rabbit-junit.
看JUnit4@Rules了解更多信息。
连接命名策略
一个新的ConnectionNameStrategy现在提供了从AbstractConnectionFactory.
有关详细信息,请参阅连接和资源管理。
侦听器容器更改
事务回滚行为
现在,无论是否配置了事务管理器,都可以将事务回滚时的消息重新排队配置为一致。 有关更多信息,请参阅有关回滚已接收消息的说明。
A.2.6. 早期版本
有关先前版本中的更改,请参阅以前的版本。
A.2.7. 1.6 自 1.5 以来的变化
测试支持
现在提供了一个新的测试支持库。 有关更多信息,请参阅测试支持。
架构工人
提供流畅 API 用于配置的构建器Queue和Exchange对象现在可用。
有关更多信息,请参阅队列和交换的构建器 API。
命名空间更改
连接工厂
您现在可以添加thread-factory到连接工厂 bean 声明 — 例如,将线程命名为
由amqp-client图书馆。
有关详细信息,请参阅连接和资源管理。
当您使用CacheMode.CONNECTION,您现在可以限制允许的连接总数。
有关详细信息,请参阅连接和资源管理。
队列定义
现在,您可以为匿名队列提供命名策略。
看AnonymousQueue了解更多信息。
侦听器容器更改
空闲消息侦听器检测
您现在可以配置要发布的侦听器容器ApplicationEvent空闲时的实例。
有关详细信息,请参阅检测空闲异步使用者。
队列检测不匹配
默认情况下,当侦听器容器启动时,如果检测到属性或参数不匹配的队列,
容器记录异常,但继续侦听。
容器现在有一个名为mismatchedQueuesFatal,这会阻止容器(和上下文)
如果在启动过程中检测到问题,则启动。
如果稍后检测到问题,例如从连接故障中恢复后,它还会停止容器。
有关详细信息,请参阅消息侦听器容器配置。
默认错误处理程序
默认错误处理程序 (ConditionalRejectingErrorHandler) 现在认为不可恢复@RabbitListener例外情况是致命的。
有关详细信息,请参阅异常处理。
AutoDeclare和RabbitAdmin实例
请参阅消息侦听器容器配置 (autoDeclare)以对该选项的语义进行一些更改,以进行一些更改
之RabbitAdmin应用程序上下文中的实例。
AmqpTemplate:超时接收
一些新的receive()方法timeout已为AmqpTemplate及其RabbitTemplate实现。
有关详细信息,请参阅轮询消费者。
用AsyncRabbitTemplate
一个新的AsyncRabbitTemplate已被引入。
此模板提供了许多发送和接收方法,其中返回值是ListenableFuture,可以
稍后用于同步或异步获取结果。
有关更多信息,请参阅异步兔子模板。
RabbitTemplate变化
1.4.1 引入了在代理支持时使用直接回复的功能。
它比对每个回复使用临时队列更有效。
此版本允许您覆盖此默认行为,并通过将useTemporaryReplyQueues属性设置为true.
有关更多信息,请参阅 RabbitMQ 直接回复。
这RabbitTemplate现在支持user-id-expression (userIdExpression使用 Java 配置时)。
有关更多信息,请参阅已验证的用户 ID RabbitMQ 文档和已验证的用户 ID。
消息属性
用CorrelationId
这correlationIdmessage 属性现在可以是String.
有关详细信息,请参阅消息属性转换器。
长字符串标头
以前,DefaultMessagePropertiesConverter“converted”标头长度超过长字符串限制(默认为 1024)
设置为DataInputStream(实际上,它引用了LongString实例的DataInputStream).
在输出时,此标头未被转换(除了转换为 String — 例如java.io.DataInputStream@1d057a39通过调用toString()在直播中)。
通过此版本,长LongString实例现在保留为LongString实例。
您可以使用getBytes[],toString()或getStream()方法。 大量传入LongString现在在输出时也正确“转换”。
有关详细信息,请参阅消息属性转换器。
入库配送模式
这deliveryMode属性不再映射到MessageProperties.deliveryMode.
如果相同,则此更改可避免意外传播MessageProperties对象用于发送出站消息。
相反,入站deliveryModeheader 映射到MessageProperties.receivedDeliveryMode.
有关详细信息,请参阅消息属性转换器。
使用带注释的端点时,标头在名为AmqpHeaders.RECEIVED_DELIVERY_MODE.
有关详细信息,请参阅带注释的端点方法签名。
入站用户 ID
这user_id属性不再映射到MessageProperties.userId.
如果相同,则此更改可避免意外传播MessageProperties对象用于发送出站消息。
相反,入站userIdheader 映射到MessageProperties.receivedUserId.
有关详细信息,请参阅消息属性转换器。
使用带注释的终结点时,标头将在名为AmqpHeaders.RECEIVED_USER_ID.
有关详细信息,请参阅带注释的端点方法签名。
RabbitAdmin变化
声明失败
以前,ignoreDeclarationFailures标志仅对IOException在通道上(例如不匹配
参数)。
它现在对任何异常(例如TimeoutException).
此外,一个DeclarationExceptionEvent现在每当声明失败时都会发布。
这RabbitAdminlast 声明事件也可用作属性lastDeclarationExceptionEvent.
有关更多信息,请参阅配置代理。
@RabbitListener变化
每个 Bean 的多个容器
当您使用 Java 8 或更高版本时,您现在可以添加多个@RabbitListener注释到@Bean类或其方法。使用 Java 7 或更早版本时,您可以使用@RabbitListeners容器注释以提供相同的 功能性。 看@Repeatable @RabbitListener了解更多信息。
@SendToSpEL 表达式
@SendTo用于路由无replyTo属性现在可以是根据request/reply 计算的 SpEL 表达式。有关更多信息,请参阅 Reply Management。
@QueueBinding改进
您现在可以在@QueueBinding附注。 现在支持@QueueBinding.
有关更多信息,请参阅注释驱动的侦听器端点。
延迟消息交换
Spring AMQP 现在对 RabbitMQ Delayed Message Exchange 插件具有一流的支持。 有关详细信息,请参阅延迟消息交换。
Exchange 内部标志
任何Exchange定义现在可以标记为internal和RabbitAdmin在以下情况下将值传递给代理
宣布交换。
有关更多信息,请参阅配置代理。
CachingConnectionFactory变化
CachingConnectionFactory缓存统计信息
这CachingConnectionFactory现在在运行时和 JMX 上提供缓存属性。
有关更多信息,请参阅运行时缓存属性。
访问底层 RabbitMQ 连接工厂
添加了一个新的 getter 以提供对底层工厂的访问。 例如,您可以使用此 getter 添加自定义连接属性。 有关详细信息,请参阅添加自定义客户端连接属性。
通道缓存(Channel Cache)
默认通道缓存大小已从 1 增加到 25。 有关详细信息,请参阅连接和资源管理。
此外,SimpleMessageListenerContainer不再将缓存大小调整为至少与数字一样大
之concurrentConsumers— 这是多余的,因为容器使用者通道永远不会被缓存。
Java 反序列化
现在,当您使用 Java 反序列化时,您可以配置允许类的“允许列表”。 如果您接受具有序列化 java 对象的消息,则应考虑创建允许列表 不受信任的来源。 有关更多信息,请参阅 Java 反序列化。
JSONMessageConverter
对 JSON 消息转换器的改进现在允许使用没有类型信息的消息 在消息头中。 有关详细信息,请参阅带注释方法的消息转换和 Jackson2JsonMessageConverter。
A.2.8. 1.5 自 1.4 以来的变化
spring-erlang不再支持
这spring-erlangjar 不再包含在发行版中。
请改用 RabbitMQ REST API。
CachingConnectionFactory变化
用于控制容器队列声明行为的属性
当侦听器容器使用者启动时,他们会尝试被动声明队列以确保它们可用
在经纪人上。
以前,如果这些声明失败(例如,因为队列不存在)或 HA 队列正在
移动后,重试逻辑固定为以五秒为间隔的三次重试尝试。
如果队列仍然不存在,则行为由missingQueuesFatal属性(默认:true).
此外,对于配置为从多个队列监听的容器,如果只有队列的子集可用,则使用者
以 60 秒的固定间隔重试丢失的队列。
这declarationRetries,failedDeclarationRetryInterval和retryDeclarationInterval属性现在是可配置的。
有关详细信息,请参阅消息侦听器容器配置。
DefaultMessagePropertiesConverter变化
您现在可以配置DefaultMessagePropertiesConverter自
确定LongString转换后的
设置为String而不是DataInputStream.
转换器有一个替代构造函数,它将该值作为限制。
以前,此限制是硬编码的1024字节。
(1.4.4 中也可用)。
@RabbitListener改进
自动交换、队列和绑定声明
您现在可以声明定义这些实体集合的 bean,并且RabbitAdmin添加
内容添加到建立连接时声明的实体列表。
有关详细信息,请参阅声明交换、队列和绑定的集合。
RabbitTemplate变化
reply-address添加
这reply-address属性已添加到<rabbit-template>组件作为替代方案reply-queue.
有关详细信息,请参阅请求/回复消息。
(在 1.4.4 中也可作为RabbitTemplate).
阻塞receive方法
这RabbitTemplate现在支持阻止receive和convertAndReceive方法。
有关详细信息,请参阅轮询消费者。
强制使用sendAndReceive方法
当mandatory标志在使用sendAndReceive和convertSendAndReceive方法,调用线程
抛出一个AmqpMessageReturnedException如果请求消息无法传递。
有关更多信息,请参阅回复超时。
RabbitManagementTemplate添加
这RabbitManagementTemplate引入了 RabbitMQ Broker 的管理插件提供的 REST API 来监控和配置 RabbitMQ Broker。
有关更多信息,请参阅 RabbitMQ REST API。
侦听器容器 Bean 名称 (XML)
| 
 这 应用普通 Spring Bean 名称覆盖。如果以后的 迁移到此版本时,如果有  | 
但是,为了支持将容器作为一个组启动和停止,新的group属性。
定义此属性后,此元素创建的容器将添加到具有此名称的 bean 中,类型为Collection<SimpleMessageListenerContainer>.
可以循环访问此组以启动和停止容器。
班级@RabbitListener
这@RabbitListener现在可以在类级别应用注释。
与新的@RabbitHandler方法注释,这允许您根据有效负载类型选择处理程序方法。
有关更多信息,请参阅多方法侦听器。
SimpleMessageListenerContainer: BackOff 支持
这SimpleMessageListenerContainer现在可以提供BackOff实例consumer启动恢复。
有关详细信息,请参阅消息侦听器容器配置。
通道关闭日志记录
引入了一种控制通道关闭日志水平的机制。 请参阅记录通道关闭事件。
应用程序事件
这SimpleMessageListenerContainer现在在使用者发生故障时发出应用程序事件。
有关详细信息,请参阅消费者事件。
消费者标签配置
以前,异步使用者的使用者标签是由代理生成的。 在此版本中,现在可以向侦听器容器提供命名策略。 请参阅消费者标签。
匿名队列命名
从 1.5.3 版本开始,您现在可以控制如何AnonymousQueue生成名称。
看AnonymousQueue了解更多信息。
A.2.9. 1.4 自 1.3 以来的变化
@RabbitListener注解
POJO 监听器可以使用@RabbitListener,由@EnableRabbit或<rabbit:annotation-driven />.
此功能需要 Spring Framework 4.1。
有关更多信息,请参阅注释驱动的侦听器端点。
RabbitMessagingTemplate添加
一个新的RabbitMessagingTemplate允许您通过使用spring-messaging Message实例。 在内部,它使用RabbitTemplate,您可以正常配置。此功能需要 Spring Framework 4.1。有关更多信息,请参阅消息传递集成。
侦听器容器missingQueuesFatal属性
1.3.5 引入了missingQueuesFatal属性SimpleMessageListenerContainer. 现在,这在侦听器容器命名空间元素上可用。请参阅消息侦听器容器配置。
兔子模板ConfirmCallback接口
这confirm方法有一个额外的参数,称为cause. 如果可用,此参数包含否定确认 (nack) 的原因。请参阅相关发布者确认和返回。
RabbitConnectionFactoryBean添加
RabbitConnectionFactoryBean创建底层 RabbitMQConnectionFactory由CachingConnectionFactory. 这允许使用 Spring 的依赖注入配置 SSL 选项。请参阅配置底层客户端连接工厂。
用CachingConnectionFactory
这CachingConnectionFactory现在让connectionTimeout设置为命名空间中的属性或属性。它在底层 RabbitMQ 上设置属性ConnectionFactory. 请参阅配置底层客户端连接工厂。
日志附加器
日志返回org.springframework.amqp.rabbit.logback.AmqpAppender已被引入。它提供了类似于org.springframework.amqp.rabbit.log4j.AmqpAppender. 有关更多信息,请参阅这些类的 JavaDoc。
日志4jAmqpAppender现在支持deliveryMode属性 (PERSISTENT或NON_PERSISTENT违约:PERSISTENT). 以前,所有 log4j 消息都是PERSISTENT.
附加器还支持修改Message发送之前 — 例如,允许添加自定义标头。子类应该覆盖postProcessMessageBeforeSend().
侦听器队列
现在,默认情况下,侦听器容器会在启动期间重新声明任何丢失的队列。一个新的auto-declare属性已添加到<rabbit:listener-container>以防止这些重新声明。 看auto-delete队列.
RabbitTemplate:mandatory和connectionFactorySelector表达 式
这mandatoryExpression,sendConnectionFactorySelectorExpression和receiveConnectionFactorySelectorExpressionSpEL 表达式的属性已添加到RabbitTemplate.
这mandatoryExpression用于评估mandatory当ReturnCallback正在使用中。
请参阅相关发布者确认和退货。
这sendConnectionFactorySelectorExpression和receiveConnectionFactorySelectorExpression当AbstractRoutingConnectionFactory,以确定lookupKey对于目标ConnectionFactory在每个 AMQP 协议交互作的运行时。
请参阅布线连接工厂。
侦听器和路由连接工厂
您可以配置SimpleMessageListenerContainer使用路由连接工厂,以启用基于队列名称的连接选择。
请参阅布线连接工厂。
RabbitTemplate:RecoveryCallback选择
这recoveryCallback属性已添加,可在retryTemplate.execute().
请参阅添加重试功能。
MessageConversionException改变
此异常现在是AmqpException.
考虑以下代码:
try {
    template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
	...
}
catch (MessageConversionException e) {
	...
}
第二个捕获块不再可访问,需要移动到捕获所有AmqpExceptioncatch 块。
RabbitMQ 3.4 兼容性
Spring AMQP 现在与 RabbitMQ 3.4 兼容,包括直接回复。 有关更多信息,请参阅兼容性和 RabbitMQ 直接回复。
ContentTypeDelegatingMessageConverter添加
这ContentTypeDelegatingMessageConverter已引入以选择MessageConverter使用,基于contentType属性中的MessageProperties.
有关详细信息,请参阅消息转换器。
A.2.10. 1.3 自 1.2 以来的变化
侦听器并发
侦听器容器现在支持根据工作负载动态缩放使用者数量,或者您可以以编程方式更改并发性,而无需停止容器。 请参阅侦听器并发。
侦听器队列
侦听器容器现在允许在运行时修改它侦听的队列。 此外,如果容器配置的队列中至少有一个可供使用,则容器现在将启动。 请参阅侦听器容器队列
此侦听器容器现在在启动期间重新声明任何自动删除队列。
看auto-delete队列.
消费者优先
侦听器容器现在支持消费者参数,让x-priority参数。
请参阅消费者优先级。
独家消费者
您现在可以配置SimpleMessageListenerContainer与单个exclusiveconsumer,阻止其他消费者监听队列。
请参阅独占消费者。
兔子管理员
您现在可以让代理生成队列名称,无论durable,autoDelete和exclusive设置。 请参阅配置代理。
直接交换绑定
以前,省略key属性binding元素的direct-exchange配置导致队列或交换与空字符串绑定为路由键。
现在它与提供的Queue或Exchange.
如果要使用空字符串路由键绑定,则需要指定key="".
AmqpTemplate变化
这AmqpTemplate现在提供多个同步receiveAndReply方法。
这些是由RabbitTemplate.
有关详细信息,请参阅接收消息。
这RabbitTemplate现在支持配置RetryTemplate在代理不可用时尝试重试(使用可选的退避策略)。
有关详细信息,请参阅添加重试功能。
缓存连接工厂
现在可以将缓存连接工厂配置为缓存Connection实例及其Channel实例,而不是使用单个连接和仅缓存Channel实例。
请参阅连接和资源管理。
绑定参数
这<binding>的<exchange>现在支持解析<binding-arguments>子元素。
您现在可以配置<binding>的<headers-exchange>使用key/value属性对(在单个标头上匹配)或使用<binding-arguments>子元素(允许在多个标头上进行匹配)。
这些选项是相互排斥的。
请参阅标头交换。
工艺路线连接工厂
一个新的SimpleRoutingConnectionFactory已被引入。
它允许配置ConnectionFactories映射,以确定目标ConnectionFactory在运行时使用。
请参阅布线连接工厂。
MessageBuilder和MessagePropertiesBuilder
现在提供了用于生成消息或消息属性的“Fluent API”。 请参阅消息生成器 API。
RetryInterceptorBuilder改变
现在提供了用于构建侦听器容器重试拦截器的“Fluent API”。 请参阅同步作中的失败和重试选项。
RepublishMessageRecoverer添加
这个新的MessageRecoverer提供是为了允许在重试用尽时将失败的消息发布到另一个队列(包括标头中的堆栈跟踪信息)。
请参阅消息侦听器和异步情况。
默认错误处理程序(自 1.3.2 起)
默认ConditionalRejectingErrorHandler已添加到侦听器容器中。
此错误处理程序检测致命消息转换问题,并指示容器拒绝该消息,以防止代理不断重新传递不可转换的消息。
请参阅异常处理。
侦听器容器“missingQueuesFatal”属性(自 1.3.5 起)
这SimpleMessageListenerContainer现在有一个名为missingQueuesFatal(默认值:true). 以前,丢失的队列总是致命的。请参阅消息侦听器容器配置。
A.2.11. 自 1.1 以来对 1.2 的更改
RabbitMQ 版本
Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但保留与早期版本的兼容性)。
RabbitMQ 3.1.x 不再支持的功能添加了某些弃用 — 联合交换和immediate属性RabbitTemplate.
兔子管理员
RabbitAdmin现在提供了一个选项,用于在声明失败时让交换、队列和绑定声明继续。
以前,所有声明都会在失败时停止。
通过设置ignore-declaration-exceptions,则此类异常将被记录(在WARN级别),但进一步的声明继续进行。这可能有用的一个示例是,当队列声明由于略有不同的ttl设置,通常会阻止其他声明继续进行。
RabbitAdmin现在提供了一个名为getQueueProperties(). 您可以使用此来确定代理上是否存在队列(返回null对于不存在的队列)。此外,它还返回队列中的当前消息数以及当前使用者数。
兔子模板
以前,当…sendAndReceive()方法与固定应答队列一起使用,两个自定义标头用于关联数据以及保留和恢复应答队列信息。在此版本中,标准消息属性 (correlationId) 默认使用,但您可以指定要改用的自定义属性。此外,嵌套replyTo信息现在保留在模板内部,而不是使用自定义标题。
这immediate属性已弃用。
使用 RabbitMQ 3.0.x 或更高版本时,不得设置此属性。
队列和其他项目的自动声明
以前,在声明队列、交换和绑定时,无法定义用于声明的连接工厂。
每RabbitAdmin使用其连接声明所有组件。
从此版本开始,您现在可以将声明限制为特定的RabbitAdmin实例。
请参阅条件声明。
AMQP 远程处理
现在提供了使用 Spring 远程处理技术的工具,使用 AMQP 作为 RPC 调用的传输。 有关详细信息,请参阅使用 AMQP 进行 Spring Remoting