Проблема с конечной точкой Spring WebFlux, не возвращающей данные о событиях, отправленных сервером (SSE)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с конечной точкой Spring WebFlux, не возвращающей данные о событиях, отправленных сервером (SSE)

Сообщение Anonymous »

Описание:
Я разрабатываю приложение Spring WebFlux, которое интегрируется со сторонним API. Этот API возвращает данные в формате text/event-stream, специально для потоковой передачи сообщений чата. Я настроил в своем приложении конечную точку для пересылки запросов к этому API с помощью WebClient и обработки ответов SSE.
Проблема:
Несмотря на получение данных из стороннего API при тестировании с помощью таких инструментов, как Postman и cURL, моя конечная точка Spring WebFlux (

Код: Выделить всё

/v1/api/bot-manager/chat-messages
) не возвращает никаких данных клиенту. Я убедился, что сторонний API правильно реагирует на ожидаемый формат данных SSE при прямом вызове.
Фрагменты кода:
Ниже приведены соответствующие части. моего приложения Spring WebFlux:
  • Уровень обслуживания (

    Код: Выделить всё

    BotManagerService
    ):[/b]

    Код: Выделить всё

    @Override
    public Flux chatMessages(ChatMessageRequest model) {
    BotInfo botInfo = botInfoRepository.findById(model.getBotId()).orElse(null);
    if (botInfo != null) {
    HttpHeaders headers = new HttpHeaders();
    headers.setBearerAuth(botInfo.getBotKey());
    headers.setContentType(MediaType.APPLICATION_JSON);
    return webClient.post()
    .uri("/chat-messages")
    .headers(httpHeaders -> httpHeaders.addAll(headers))
    .body(BodyInserters.fromValue(model))
    .accept(MediaType.TEXT_EVENT_STREAM, MediaType.APPLICATION_OCTET_STREAM, MediaType.APPLICATION_JSON)
    .acceptCharset(StandardCharsets.UTF_8)
    .retrieve()
    .bodyToFlux(String.class)
    .doOnNext(chatResponse -> {
    System.out.println(gson.toJson(chatResponse));
    })
    .log();
    }
    throw new RuntimeException("Bot info not found");
    }
    
  • Уровень контроллера (

    Код: Выделить всё

    BotManagerController
    ):[/b]

    Код: Выделить всё

    @PostMapping(value = "/chat-messages", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux chatMessages(@RequestBody ChatMessageRequest model) {
    return botManagerService.chatMessages(model);
    }
    
Дополнительная информация:
  • Третий -party API непрерывно возвращает данные в формате text/event-stream.
  • Я подтвердил, что настройка и заголовки webClient верны, поскольку я могу регистрировать ответы на моем уровне обслуживания.
  • Несмотря на успешные журналы на уровне обслуживания, конечная точка контроллера не передает никаких данных обратно клиенту.
Вопрос:
Что может быть причиной того, что моя конечная точка Spring WebFlux /v1/api/bot-manager/chat-messages не передает полученный сервер -Отправлены данные о событиях (SSE) клиенту? Есть ли проблема с конфигурацией или ошибка в моем подходе?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/787 ... s-sse-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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