Поддерживаю ли поддержка Spring Boot MVC RestClient, возвращая SSE в типе потока для потоковых данных?JAVA

Программисты JAVA общаются здесь
Anonymous
Поддерживаю ли поддержка Spring Boot MVC RestClient, возвращая SSE в типе потока для потоковых данных?

Сообщение Anonymous »

Мы знаем, что в Spring Webflux данные SSE могут быть обработаны элегантно. Это связано с поддержкой типа потока и реактивного клиента WebClient. < /P>
@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux streamChatResponses() {
//eg: call openai
return webClient.post()
.uri("/chat/completions")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(requestBody)
.retrieve()
.bodyToFlux(String.class);
}
< /code>
Для проектов Spring Boot MVC (сервис) мы можем ввести Spring AI для достижения типа потока потока, позволяя контроллерам возвращать данные SSE. Тем не менее, всегда отсутствует HTTPClient, который поддерживает тип потока. < /P>

com.alibaba.cloud.ai
spring-ai-alibaba-starter



@RestController
public class SseController {

@GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux streamEvents() {
//[[TODO]] :Whether RestClient or RestTemplate supports returning SSE in Flux type ?
return Flux.interval(Duration.ofSeconds(1))
.map(sequence -> "SSE Event - " + LocalTime.now());
}
}

В проекте Spring Boot (сервис) есть ли клиент, который поддерживает потоки данных Flux без введения зависимости Webflux? @GetMapping("/sse-stream-old-code")
public void streamSse(HttpServletResponse response) {
response.setContentType("text/event-stream");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());

RestTemplate restTemplate = new RestTemplate();
String url = "http://*******/chat_stream";

ResponseExtractor responseExtractor = restResponse -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(restResponse.getBody(), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
response.getWriter().write("data: " + line + "\n\n");
response.getWriter().flush();
}
}
return null;
};

restTemplate.execute(url, HttpMethod.POST, null, responseExtractor);
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... -streaming

Вернуться в «JAVA»