对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
异步@RabbitListener
返回类型
@RabbitListener
(以及@RabbitHandler
) 方法可以使用异步返回类型指定CompletableFuture<?>
和Mono<?>
,让回复异步发送。ListenableFuture<?>
不再受支持;它已被 Spring Framework 弃用。
侦听器容器工厂必须配置为AcknowledgeMode.MANUAL 这样 Consumer 线程就不会确认消息;相反,异步完成将在异步作完成时对消息进行 ack 或 nack 处理。
当异步结果完成但出现错误时,消息是否重新排队取决于引发的异常类型、容器配置和容器错误处理程序。
默认情况下,消息将被重新排队,除非容器的defaultRequeueRejected 属性设置为false (它是true 默认情况下)。
如果异步结果以AmqpRejectAndDontRequeueException ,则不会将消息重新排队。
如果容器的defaultRequeueRejected property 为false ,你可以通过将 future 的 exception 设置为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
依赖项必须存在于 Classpath 中,才能允许suspend
函数调用。
同样从版本 3.0.5 开始,如果RabbitListenerErrorHandler
在具有异步返回类型(包括 Kotlin 挂起函数)的侦听器上配置,则会在失败后调用错误处理程序。
有关此错误处理程序及其用途的更多信息,请参阅处理异常。