public class Test {
public StudentDto publishStudentDto
{
ListenableFuture<SendResult<String, Student>> future = this.studentKafkaTemplate.send(topicName, student);
future.addCallback(new ListenableFutureCallback<SendResult<String, Student>>() {
@Override
public void onSuccess(SendResult<String, Student> result) {
logger.info("Student created & message published to topic: {} with offset: {} to partition {}", student, result.getRecordMetadata().offset(), result.getRecordMetadata().partition());
}
@Override
public void onFailure(Throwable ex) {
logger.error("student not created. Error in publishing student to topic : " + student, ex);
}
});
}
}
如果 Student 在主题上成功发布,我想将 StudentDto 返回给控制器。但由于 onSuccess 是在响应返回到控制器之后调用的。如果发布成功,有什么办法可以将 StudentD 返回给我吗?
如果 Student 在主题上成功发布,我想将 StudentDto 返回给控制器。但由于 onSuccess 是在响应返回到控制器之后调用的。如果发布成功,有什么办法可以将 StudentD 返回给我吗?
不要使用异步侦听器,只需在未来调用
get(...)
(有一定的超时),线程将阻塞,直到成功或失败。
future.completable().join();
通过使用上面这行代码和一个用于更新状态的小标志,主线程将等待回调完成后再退出,您可以比较标志来返回或离开它。
join() 返回 future 完成后的结果。