私は別のサーバーにhttp投稿を送信する必要がある大量のJavaアプリケーションを持っています。 は現在、私はorg.apache.commons.httpclientライブラリを使用しています:java非ブロッキングHTTPクライアント
private static void sendData(String data) {
HttpClient httpclient = new HttpClient();
StringRequestEntity requestEntity;
try {
requestEntity = new StringRequestEntity(data, "application/json", "UTF-8");
String address = "http://<my host>/events/"
PostMethod postMethod = new PostMethod(address);
postMethod.setRequestEntity(requestEntity);
httpclient.executeMethod(postMethod);
} catch (Exception e) {
LOG.error("Failed to send data ", e);
}
}
これは私が私のマルチスレッドの大容量アプリに合わない、同期私のHTTPリクエストを送信しています意味します。だから私はこれらの呼び出しを非同期非ブロッキングhttp呼び出しに変更したいと思います。
私はapache async clientとxsocketのようなオプションの数を調べていましたが、それを動作させることはできませんでした。
はningをしようとしました:
private static void sendEventToGrpahiteAsync(String event) {
LOG.info("\n" + "sendEventToGrpahiteAsync");
try (AsyncHttpClient asyncHttpClient = new AsyncHttpClient()) {
BoundRequestBuilder post = asyncHttpClient.preparePost();
post.addHeader("Content-Type", "application/json");
post.setBodyEncoding("UTF-8");
post.setBody(event);
post.execute(new HttpRequestCompletionHandler());
} catch (Exception e) {
LOG.error("Failed to sending event", e);
}
}
私は、Apache HttpAsyncClientを試してみました:
private static void sendEventToGrpahiteAsync(String event) {
LOG.info("\n" + "sendEventToGrpahiteAsync");
try (CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault()) {
httpclient.start();
HttpPost request = new HttpPost(addr);
StringEntity entity = new StringEntity(event, ContentType.create("application/json", Consts.UTF_8));
request.setEntity(entity);
httpclient.execute(request, null);
} catch (Exception e) {
LOG.error("Failed to sending event", e);
}
}
私はxsocketを試してみました:
private static void sendEventToGrpahiteAsync2(String event) {
LOG.info("\n" + "sendEventToGrpahiteAsync");
try (INonBlockingConnection con = new NonBlockingConnection(<SERVER_IP>, 80);
IHttpClientEndpoint httpClientConnection = new HttpClientConnection(con)) {
IHttpResponseHandler responseHandler = new MyResponseHandler();
IHttpRequest request = new PostRequest(url_address, "application/json", Consts.UTF_8.toString(), event);
request.setTransferEncoding(Consts.UTF_8.toString());
httpClientConnection.send(request, responseHandler);
} catch (Exception e) {
LOG.error("Failed to sending event", e);
}
}
私は例外を取得していないが、ポストはに取得していませんターゲットも同様です。 明確にするには、ターゲットはgraphite serverです。投稿が到着すると、それはグラフにはっきりと見えます。同期ポストはうまくいき、結果をグラフで見ることができますが、非同期ポストは目的地のグラフに表示されません。
私には何が欠けていますか?
おかげ
最初の例を 'apache async client'から' HttpGet'の代わりに 'HttpPost'を使うよう変換してください。 –
実例を使って回答を投稿し、クレジットを獲得するのはどうですか? – forhas