Java 没有为springkafka模板发送方法注册回调的可能性
我想注册从spring kafkatemplate.send返回的未来对象的回调 我对上述方法的未来结果调用下面的方法Java 没有为springkafka模板发送方法注册回调的可能性,java,callback,future,spring-kafka,Java,Callback,Future,Spring Kafka,我想注册从spring kafkatemplate.send返回的未来对象的回调 我对上述方法的未来结果调用下面的方法 void org.springframework.util.concurrent.ListenableFuture.addCallback(ListenableFutureCallback<? super T> callback) 像这样: kafkaTemplate.send(topicname, keyString, data).addCallback(
void org.springframework.util.concurrent.ListenableFuture.addCallback(ListenableFutureCallback<? super T> callback)
像这样:
kafkaTemplate.send(topicname, keyString, data).addCallback(
new ListenableFutureCallback<SendResult<String, Data>>() {
@Override
public void onFailure(Throwable ex) {
logger.error("Failure while sending message in kafka.", ex);
}
@Override
public void onSuccess(SendResult<String, Data> result) {
logger.info("Successfully sent message to kafka");
}
});
假设send很快就完成了实际的发送,并且在我注册回调之前已经设置了结果。我的回调注册将在future.set操作之后进行。所以,我的回调有可能不会执行。这不是一种可能性吗
我知道这种可能性很小。然而,这会发生吗?如果是这样,解决方案是什么。不,未来会在添加回调后立即调用回调来解决这个问题,如果已经满足了,请查看SettableListenableCallback.addCallback的源代码
kafkaTemplate.send(topicname, keyString, data).addCallback(
new ListenableFutureCallback<SendResult<String, Data>>() {
@Override
public void onFailure(Throwable ex) {
logger.error("Failure while sending message in kafka.", ex);
}
@Override
public void onSuccess(SendResult<String, Data> result) {
logger.info("Successfully sent message to kafka");
}
});