ListenableFuture - 如何在返回前等待

时间:2017-05-26 19:45:44

标签: java spring-boot spring-kafka

我有一个Spring Cloud微服务,它在Kafka代理上发布消息,这个微服务可以通过REST api访问。

我想将提交状态返回给调用者,但似乎Java没有等待。如何在代码返回之前使其等待成功或失败?

下面是代码:

properties
  type = java.util.Properties
  modifiers = [private]
    kind = CLASS
    modifiers = [public]
strings
  type = java.util.List<java.lang.String>
  modifiers = [private]
    kind = INTERFACE
    modifiers = [public, abstract]

2 个答案:

答案 0 :(得分:1)

回调适用于需要异步结果的时间。如果要阻止调用线程,请使用future.get() ...

ListenableFuture<SendResult<String, String>> future = template.send("foo", "bar");
try {
    SendResult<String, String> sendResult = future.get(10, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Thread.currentThread.interrupt();
}
catch (ExecutionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (TimeoutException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

答案 1 :(得分:1)

Kafkaproducer.send返回未来。如果您想等待,那么您可能更喜欢以下内容:

kafkaProduc.send("topictest", msg).get(1L, TimeUnit.SECONDS);

然后失败可能会引发异常而不是调用你的错误回调。

相关问题