我想将此 Java 代码迁移到 Spring Boot 3:
public void send(String topic, K key, V message, BiConsumer<SendResult<K, V>, Throwable> callback) {
CompletableFuture<SendResult<K, V>> future = kafkaTemplate.send(topic, key, message);
if (Objects.nonNull(callback)) {
future.whenComplete(callback);
}
}
......
// call kafka method
kafkaProducer().send("topic", "key",
"messge", listenableFutureCallback("12345"));
......
private ListenableFutureCallback listenableFutureCallback(String userId) {
return new ListenableFutureCallback() {
@Override
public void onFailure(Throwable ex) {
.......
}
@Override
public void onSuccess(Object result) {
........
}
};
}
我在这一行遇到错误:
listenableFutureCallback("12345")
Required type: BiConsumer <org.springframework.kafka.support.SendResult<java.lang.String,java.lang.String>,
java.lang.Throwable>
Provided: ListenableFutureCallback
你知道我应该如何迁移/替换
ListenableFutureCallback
以便从 BiConsumer
Java 方法返回 listenableFutureCallback
吗?
这似乎是 BiConsumer 导入的问题。您应该使用“java.util.function.BiConsumer”中的 BiConsumer,而不是“org.apache.kafka.commonKafkaFuture.BiConsumer”。
PS:据我了解,ListenableFutureCallback 在 Spring 6.0 中已被弃用。请尝试从您的代码中删除它并使用 CompletableFuture 代替。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/concurrent/ListenableFutureCallback.html