异步 @KafkaListener 返回类型

从 3.2 版本开始,@KafkaListener(和 @KafkaHandler)方法可以指定异步返回类型,让回复异步发送。返回类型包括 CompletableFuture<?>Mono<?> 和 Kotlin suspend 函数。

@KafkaListener(id = "myListener", topics = "myTopic")
public CompletableFuture<String> listen(String data) {
    ...
    CompletableFuture<String> future = new CompletableFuture<>();
    future.complete("done");
    return future;
}
@KafkaListener(id = "myListener", topics = "myTopic")
public Mono<Void> listen(String data) {
    ...
    return Mono.empty();
}
当检测到异步返回类型时,AckMode 将自动设置为 MANUAL 并启用乱序提交;相反,异步完成将在异步操作完成时进行确认。当异步结果以错误完成时,消息是否恢复取决于容器错误处理程序。如果监听器方法中发生某些异常,阻止创建异步结果对象,则必须捕获该异常并返回一个适当的返回对象,该对象将导致消息被确认或恢复。

如果在具有异步返回类型的监听器(包括 Kotlin 挂起函数)上配置了 KafkaListenerErrorHandler,则在发生故障后会调用错误处理程序。有关此错误处理程序及其用途的更多信息,请参见 处理异常