У меня есть служба 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();