Я слушаю поток событий, используя HttpClient :: GET.HttpResponse возвращается как InputStream, который записывается вызываемым сервером, поскольку у него есть данные для записи, но сервер никогда фактически не закрывает поток.
Мой код создает JsonParser с использованием этого InputStream и обрабатывает данныепо мере поступления. Однако, поскольку этот поток никогда не закрывается, он зависает в nextToken (), когда достигает логического конца:
while (keepListening()) {
if (parser.nextToken() == null) {
return;
}
treeNode = parser.readValueAsTree();
LOGGER.trace("treeNode: {}", treeNode);
isRequestEnd(treeNode).map(this::reportCoreMsUsed)
.map(report -> writeReport(csvPrinter, report, this.reportsWritten % 1000.0 == 0.0));
}
Это приводит к зависанию потока, застрявшему в ожидании nextToken () длявернуть то, чего никогда не будет.Это не прерывается, и я не знаю, как его убить.Было бы здорово, если бы я мог передать тайм-аут на вызов nextToken (), но так как я не могу, мое приложение работает бесконечно.
Этот вопрос является продолжением Использование Java 11HttpClient для чтения фрагментированных данных , где указывается больше клиентского кода.
Любые идеи о том, как обрабатывать эту клиентскую часть (т.е. в коде моего приложения)?Я открыт для использования другой библиотеки.