此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6! |
异步@RabbitListener
返回类型
@RabbitListener
(和@RabbitHandler
) 方法可以使用异步返回类型指定CompletableFuture<?>
和Mono<?>
,让异步发送回复。ListenableFuture<?>
不再受支持;它已被 Spring Framework 弃用。
侦听器容器工厂必须配置AcknowledgeMode.MANUAL 这样消费者线程就不会确认消息;相反,异步完成将在异步作完成时确认或 nack 消息。
当异步结果完成并出现错误时,消息是否重新排队取决于抛出的异常类型、容器配置和容器错误处理程序。
默认情况下,消息将重新排队,除非容器的defaultRequeueRejected 属性设置为false (这是true 默认情况下)。
如果异步结果使用AmqpRejectAndDontRequeueException ,则不会将消息重新排队。
如果容器的defaultRequeueRejected 属性是false ,您可以通过将 future 的异常设置为ImmediateRequeueException 并且消息将被重新排队。
如果侦听器方法中发生某些异常,导致创建异步结果对象,则必须捕获该异常并返回适当的返回对象,该对象将导致消息被确认或重新排队。 |
从版本 2.2.21、2.3.13、2.4.1 开始,AcknowledgeMode
将自动将MANUAL
检测到异步返回类型时。
此外,具有致命例外的传入消息将被单独否定确认,以前任何先前未确认的消息也会被否定确认。
从 3.0.5 版开始,@RabbitListener
(和@RabbitHandler
) 方法可以用 Kotlin 标记suspend
整个处理过程和回复生成(可选)发生在各自的 Kotlin 协程上。
所有提到的规则AcknowledgeMode.MANUAL
仍然适用。
这org.jetbrains.kotlinx:kotlinx-coroutines-reactor
类路径中必须存在依赖项才能允许suspend
函数调用。
同样从版本 3.0.5 开始,如果RabbitListenerErrorHandler
在具有异步返回类型(包括 Kotlin 挂起函数)的监听器上配置,则在失败后调用错误处理程序。
有关此错误处理程序及其用途的更多信息,请参阅处理异常。