スレッドごとに複数の呼び出しを実行するために、非同期http呼び出しを行うためにapache async httpクライアントを使用します。コールバックからGuava ListenableFutureを取得する方法は?
コードは以下のとおりです:https://hc.apache.org/httpcomponents-asyncclient-dev/quickstart.html
CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
// Start the client
httpclient.start();
// One most likely would want to use a callback for operation result
final CountDownLatch latch1 = new CountDownLatch(1);
final HttpGet request2 = new HttpGet("http://www.apache.org/");
httpclient.execute(request2, new FutureCallback<HttpResponse>() {
public void completed(final HttpResponse response2) {
latch1.countDown();
System.out.println(request2.getRequestLine() + "->" + response2.getStatusLine());
}
public void failed(final Exception ex) {
latch1.countDown();
System.out.println(request2.getRequestLine() + "->" + ex);
}
public void cancelled() {
latch1.countDown();
System.out.println(request2.getRequestLine() + " cancelled");
}
});
latch1.await();
私はnodejsでプログラムし、約束のアプローチにはとても満足だった最後の時間では。私が見つけた最も近いアイテムは、GUAVAのListenableFutureでした。 (私はJava 8を使用できません)。問題は、コールバックのアプローチをListenableFutureに変換する方法です。
これはコールバックで私は単に解決機能を呼び出すことができるので、これは簡単です。私はJavaでこれを行う方法を認識していないと私はこれを行う方法をGoogleで見つけられませんでした。
わかりません。未来を処理したくない場合はコールバックを使用しており、将来使用する場合はコールバックは必要ありません。 Guavaのコールバックの仕組みは、将来的に静的に登録されているため、あなたが使用しているHttpライブラリがあなたから隠している場合、未来を手に入れることはできません。なぜ、最初に未来が必要なのですか? (申し訳ありませんが、なぜ迷惑なのですが、何を達成したいのか不明です) –
私の使用例は、コールバックスタイルで書かれた既存のコードを使いたいということです。私はコールバックが嫌いで、代わりにlistenablefuturesを使いたい。問題はこれを達成する方法です。 –