私はKafkaブローカーにメッセージを投稿する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);
ありがとう、ゲイリー、このアプローチを試してみましょう。しかし、スレッドが現在ブロックされていて、別の呼び出し元が実行メソッドを要求すると、春に新しいスレッドが作成されるか、ブロックされたままになります。 – Alexandre
RESTの場合、スレッドごとに(通常は)TomcatなどのWebサーバーによって管理されます。各リクエストは独自のスレッドを取得します。テンプレートはスレッドセーフです。 –
チャームのように働いた!どうもありがとう! – Alexandre