我有一个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]
答案 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);
然后失败可能会引发异常而不是调用你的错误回调。