У меня есть болт, который делает вызов API (HTTP Get) для каждого кортежа. чтобы избежать необходимости ждать ответа, я хотел использовать apache HttpAsyncClient.
после создания экземпляра клиента в методе подготовки болта метод execute создает 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 показывает ошибку:
java.lang.RuntimeException: java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:12