Вот упрощенная версия моего кода:
Вот упрощенная версия моего кода:
Вот упрощенная версия моего кода:
p>
Код: Выделить всё
private Flux
processStreamDataFlux(Flux
streamDataFlux, AtomicReference answer, ChatBotConversationRPCResponse response) {
AtomicBoolean hasAnswer = new AtomicBoolean(true);
return streamDataFlux
.flatMap(data -> {
var inputData = ((StreamData) data);
return Mono.just(inputData);
})
.doOnNext(streamData -> {
if (!streamData.getToken().isEmpty()) {
if (streamData.getIsAnswer().equals("True")) {
answer.updateAndGet(sb -> {
sb.append(streamData.getToken());
if (sb.length() >= 10) {
sendSlackMessage(sb.toString());
sb.delete(0, 10);
}
return sb;
});
} else {
logger.info(String.format("Sources URLs: %s", streamData.getToken()));
response.setUrlSources(extractLinks(streamData.getToken()));
}
}
})
.doOnComplete(() -> {
if (hasAnswer.get()) {
response.setAnswer(answer.get().toString());
response.setResponse(true);
} else {
response.setAnswer(chatBot.getNoAnswer());
response.setResponse(false);
}
});
}В этом коде процессStreamDataFlux обрабатывает данные входящего потока и вызывает sendSlackmessage для каждого пакета. из 10 слов. Однако меня беспокоит влияние вызова sendSlackmessage на процесс потоковой передачи токенов. Есть ли способ запустить службу Slack в отдельном потоке, обеспечив при этом плавную потоковую передачу токенов?
Я был бы признателен за любые идеи или предложения о том, как добиться такого параллелизма в Java. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/784 ... g-web-flux