elasticsearch,threadpool,completable-future,Java,elasticsearch,Threadpool,Completable Future" /> elasticsearch,threadpool,completable-future,Java,elasticsearch,Threadpool,Completable Future" />

Java 运行线程时的异常处理

Java 运行线程时的异常处理,java,elasticsearch,threadpool,completable-future,Java,elasticsearch,Threadpool,Completable Future,我有一个应用程序,它有一个卡夫卡消费者,并根据收到的数据更新弹性搜索 我的问题是,当ES出现故障时,卡夫卡消费者会完全停止,不会重新启动 我相信这是由于我的ES代码是如何运行的: public CompletionStage<SearchResponse> executeSearch(SearchRequest searchRequest) { CompletableFuture<SearchResponse> f = new CompletableFut

我有一个应用程序,它有一个卡夫卡消费者,并根据收到的数据更新弹性搜索

我的问题是,当ES出现故障时,卡夫卡消费者会完全停止,不会重新启动

我相信这是由于我的ES代码是如何运行的:

public CompletionStage<SearchResponse> executeSearch(SearchRequest searchRequest) {
        CompletableFuture<SearchResponse> f = new CompletableFuture<>();

        client.searchAsync(searchRequest, RequestOptions.DEFAULT, new ActionListener<SearchResponse>() {
            @Override
            public void onResponse(SearchResponse searchResponse) {
                f.complete(searchResponse);
            }

            @Override
            public void onFailure(Exception e) {

                throw new Exception();  // I am guessing because of this
            }
        });
        return f;
} 
它工作得很好,但我不明白为什么抛出异常会导致这种情况


任何帮助都将不胜感激。

对于那些需要解决方案的人,我将我的代码更改为以下代码,以使其能够正常工作:

public void onFailure(Exception e) {
    f.completeExceptionally(new Exception());
}

对于那些需要解决方案的用户,我将代码更改为下面的代码,以使其能够正常工作:

public void onFailure(Exception e) {
    f.completeExceptionally(new Exception());
}

另外,潜在相关的还有
异常
方法和
CompletableFuture中的
句柄
方法

CompletableFuture.例外((ex)->)
-


潜在相关的还有
异常
方法和
完全未来
中的
句柄
方法

CompletableFuture.例外((ex)->)
-


这需要更多关于消费者结构的信息。但是,您的异常可能正在打破轮询循环。如果不传播异常,则轮询循环将保持完整,并继续处理将来的事件。@mohro您需要关于使用者的哪些信息?它是一个kafka streams使用者,其处理器在内部调用此。kafka使用者实现的代码片段。如果不看它是如何编写的,就很难确定它是如何处理异常的。这需要更多关于消费者结构的信息。但是,您的异常可能正在打破轮询循环。如果不传播异常,则轮询循环将保持完整,并继续处理将来的事件。@mohro您需要关于使用者的哪些信息?它是一个kafka streams使用者,其处理器在内部调用此。kafka使用者实现的代码片段。如果不看它是如何编写的,就很难确定它是如何处理异常的。