Почему мое приложение Angular не получает события, отправленные сервером (SSE) из бэкэнда WebFlux?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему мое приложение Angular не получает события, отправленные сервером (SSE) из бэкэнда WebFlux?

Сообщение Anonymous »

Я создаю приложение с использованием серверной части Spring WebFlux и внешнего интерфейса Angular. Мой бэкэнд отправляет события, отправленные сервером (SSE), но по какой-то причине приложение Angular не получает эти события, хотя тот же бэкэнд работает отлично при тестировании в Postman или с помощью Curl.
Вот что я реализовал на данный момент:
Бэкэнд (WebFlux):
Контроллер WebFlux отправляет SSE с использованием MediaType.TEXT_EVENT_STREAM_VALUE:

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

@RestController
public class EventController {

@GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux getEvents() {
return Flux.interval(Duration.ofSeconds(1))
.map(tick -> "Event #" + tick)
.doOnNext(event -> System.out.println("Sending: " + event));
}
}

Когда я тестирую эту конечную точку с помощью Curl или Postman, я вижу правильную потоковую передачу событий.
Фронтенд (Angular):
Я использую собственный API EventSource для использования SSE:

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

fetchEvents(): Observable {
return new Observable(observer => {
const eventSource = new EventSource('/api/events'); // Proxying through Angular dev server

eventSource.onmessage = event => {
observer.next(event.data);
};

eventSource.onerror = error => {
console.error('EventSource error:', error);
observer.error(error);
eventSource.close();
};

return () => eventSource.close();
});
}

В моем компоненте Angular:

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

this.fetchEvents().subscribe({
next: event => console.log('Received event:', event),
error: error => console.error('Error:', error),
});

Конфигурация прокси:
В разработке я использую конфигурацию прокси для перенаправления /api/events на http://localhost:8080/events:proxy.conf.json:

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

{
"/api/*": {
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
}
}

Проблема:[/b]
1. В приложении Angular EventSource немедленно запускает событие onerror без получения данных.
2.На вкладке «Сеть» браузера показано, что запрос к /api/events выполнен, но соединение немедленно закрывается без каких-либо данных SSE.
3.Ошибок в сети нет. серверные журналы.
Что я пробовал:
1. Тестирование конечной точки /events с помощью Curl и Postman — работает отлично.
2. Убедитесь, что заголовок ответа включает Content-Type: text/event-stream.
3. Двойная проверка конфигурации прокси-сервера в Angular.
4. Добавление настроек CORS в бэкэнд WebFlux:
Ява

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

@Bean
public CorsWebFilter corsWebFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://localhost:4200");
config.addAllowedMethod("*");
config.addAllowedHeader("*");
config.setAllowCredentials(true);

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);

return new CorsWebFilter(source);
}

Что может быть причиной сбоя приложения Angular при использовании SSE из серверной части WebFlux и как я могу решить эту проблему?
Любая помощь будем очень признательны!

Подробнее здесь: https://stackoverflow.com/questions/793 ... bflux-back
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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