Проблема утечки соединения при использовании клиента Apollo - PullRequest
0 голосов
/ 12 апреля 2019

Используется клиент Apollo с клиентом okHttpClient.
Библиотека Apollo обрабатывает ответ на запрос с помощью okhttpClient.Мое приложение ничего не делает с запросом и ответом OKHttpClient.

Создан клиент Apollo, используя следующий код:

OkHttpClient okHttpClient = new OkHttpClient
            .Builder()
            .connectTimeout(queryTimeout, TimeUnit.SECONDS)
            .readTimeout(queryTimeout, TimeUnit.SECONDS)
            .writeTimeout(queryTimeout, TimeUnit.SECONDS)
            .addInterceptor(chain -> {
                Request request = chain.request().newBuilder()
                        .header("Authorization", getAuthorizationValue())
                        .build();
                return chain.proceed(request);
            })
            .build();
    return new ApolloClient(com.apollographql.apollo.ApolloClient.builder()
            .serverUrl(graphqlEndPoint)
            .okHttpClient(okHttpClient)
            .build());

Приложение, выдающее предупреждение

2019-04-10 05:59:19.421  WARN 52654 --- [OkHttp ConnectionPool] okhttp3.OkHttpClient                     : A connection to http://127.0.0.1/ was leaked. Did you forget to close a response body?

Ниже вопросы не работалидля меня:
OkHttp: избежать предупреждения об утечке соединения
OkHttp: утечка соединения с http://example.com/.Вы забыли закрыть тело ответа?

Использование клиентского запроса Apollo (по запросу):

this.client.query(query).enqueue(callback);

Реализация обратного вызова:

@Slf4j
public class SyncableCallback<T> extends ApolloCall.Callback<T> {

    private CompletableFuture<T> completableFuture = new CompletableFuture<>();

    @Override
    public void onResponse(@Nonnull Response<T> response) {
        log.debug("Response received: {}", response.data());
        completableFuture.complete(response.data());
    }

    @Override
    public void onFailure(@Nonnull ApolloException e) {
        completableFuture.completeExceptionally(e);
    }

    public T getResult() throws ClientException {
        try {
            return completableFuture.get();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new ClientException(e);
        } catch (ExecutionException e) {
            throw new ClientException(e);
        }
    }
}
...