Я хочу зарегистрировать обратный вызов для будущего объекта, возвращенного из пружины kafkatemplate.send()
.
ListenableFuture<SendResult<K, V>> org.springframework.kafka.core.KafkaTemplate.send(String topic, K key, V data)
Я вызываю метод ниже для будущего результата вышеупомянутого метода.
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()
.Таким образом, есть вероятность, что мой обратный вызов не будет выполнен.Разве это не возможно?
Я знаю, что такая возможность намного меньше.Тем не менее, это может случиться?Если так, то каково решение.