我有一個Spring Cloud微服務,它在卡夫卡經紀人上發佈消息,這個微服務可以通過REST api訪問。ListenableFuture - 如何在返回之前等待
我想將提交狀態返回給調用者,但看起來像Java不等待。如何讓我的代碼在返回之前等待成功或失敗?
繼承人的代碼:
kafkaProduc.send("topictest", msg).addCallback(
new ListenableFutureCallback<SendResult<String, ExecutionDataMessage>>() {
@Override
public void onSuccess(SendResult<String, ExecutionDataMessage> result) {
eresp.status = "ok";
eresp.msg = "message submitted successfully";
}
@Override
public void onFailure(Throwable ex) {
eresp.status = "error";
eresp.msg = "failure while sending data to kafka. exception: " + ex.getMessage();
}
});
HttpStatus erespStatus = eresp.status == "ok" ? HttpStatus.CREATED : HttpStatus.BAD_REQUEST;
return new ResponseEntity<ExecutionResponse>(eresp, erespStatus);
感謝加里,會嘗試這種方法。但假設線程當前被阻塞,另一個調用者請求執行方法,spring會創建一個新線程還是會被阻塞? – Alexandre
如果是REST,線程(通常)由Web服務器(例如Tomcat)管理,則每個請求都有自己的線程。該模板是線程安全的。 –
工作就像一個魅力!非常感謝! – Alexandre