タプルごとに API 呼び出し (HTTP Get) を行っているボルトがあります。応答を待つ必要がないように、Apache HttpAsyncClient の使用を検討していました。
ボルトの準備メソッドでクライアントをインスタンス化した後、実行メソッドはタプルから URL を構築し、sendAsyncGetRequest(url) を呼び出します。
private void sendAsyncGetRequest(String url){
httpclient.execute(new HttpGet(url), new FutureCallback<HttpResponse>() {
@Override
public void completed(HttpResponse response) {
LOG.info("Response Code : " + response.getStatusLine());
LOG.debug(response.toString());
}
@Override
public void failed(Exception ex) {
LOG.warn("Async http request failed!", ex);
}
@Override
public void cancelled() {
LOG.warn("Async http request canceled!");
}
});
}
トポロジはデプロイされますが、Storm UI に次のエラーが表示されます。
java.lang.RuntimeException: java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:12