Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有为springkafka模板发送方法注册回调的可能性_Java_Callback_Future_Spring Kafka - Fatal编程技术网

Java 没有为springkafka模板发送方法注册回调的可能性

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(

我想注册从spring kafkatemplate.send返回的未来对象的回调

我对上述方法的未来结果调用下面的方法

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");
        }

    });