Обработчик асинхронного клиента в Джерси никогда не прерывается после перезапуска сервера - PullRequest
0 голосов
/ 19 октября 2018

У меня есть служба ReST, к которой я подключаюсь с помощью асинхронного клиента в Джерси.Я использую InvocationCallback для обработки ответов в качестве обратных вызовов.Все хорошо, если я не откажусь от сервера во время большой нагрузки от моей клиентской службы.После нескольких отскоков я обнаружил, что под прикрытием клиент-джерси зарегистрировал внутренние обработчики обратного вызова для сообщений, на которые сервер никогда не ответит (потому что он был перезапущен и потерял все признаки невыполненного запроса).

Я бы ожидал, что Джерси (внутренне) будет опрашивать свой зарегистрированный список асинхронных обработчиков в поисках устаревших обработчиков и периодически очищать их с помощью исключений тайм-аута для зарегистрированных обработчиков обратного вызова, но эти обработчики без ответа никогда не очищаются.

Что я делаю не так?Это ДОЛЖНО быть известной проблемой в Джерси.

Я создаю своего клиента так:

ClientBuilder builder = ClientBuilder.newBuilder();
this.client = builder
    .executorService(es)
    .register(JsonProcessingFeature.class)
    .register(LoggingFeature.class)
    .property(LoggingFeature.LOGGING_FEATURE_LOGGER_NAME_CLIENT, log.getName())
    .connectTimeout(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
    .readTimeout(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
    .withConfig(new ClientConfig().connectorProvider(new JdkConnectorProvider()))
    .build();
...