Рубрики
Без рубрики

Краткий пример события в реальном времени Потоковая Передача С использованием Spring Webflow

Spring Web Flux – это платформа для Java, которая обеспечивает поддержку реактивного программирования. Эта структура… Помеченный как java, потоковая передача, веб-поток, весна.

Spring Web Flux – это фреймворк для Java, обеспечивающий поддержку реактивного программирования. Эта структура была создана PIVOTAL , компанией, стоящей за разработкой Spring, и основана на проекте Reactor .

Реактивное программирование – это парадигма, которая состоит в том, чтобы рассматривать почти все как поток элементов (поток). В настоящее время веб-приложениям требуется большая динамичность, а это означает, что эти приложения выполняют операции в режиме реального времени.

Те, кто имел дело с AJAX в прошлом, наверняка помнят, когда время работы компьютера периодически обновлялось. Это создавало впечатление, что все происходило онлайн, не было необходимости перезагружать всю страницу.

Реактивное программирование следует схеме Издатель/Подписчик , аналогичной шаблону проектирования наблюдателя. Следовательно, клиенту не нужно делать так много запросов к серверу.

Мы собираемся начать с простого, но очень наглядного примера, чтобы показать самые основные функции Spring WebFlux . Для этого мы будем использовать Spring Boot 2, который использует Spring Framework 5.

Мы можем создать начальный проект в https://start.spring.io

Создание RestController

Первое, что мы собираемся сделать, это создать контроллер с аннотацией @RestController . Этот контроллер будет генерировать случайные целые числа каждую секунду, а затем возвращать их с помощью объекта Flux.

В Моно и в Flux объекты являются основными строительными блоками Spring Web Flux. Если конкретная операция возвращает один объект, то система возвращает объект Mongo. Если операция возвращает несколько элементов, тип потока представляет эти элементы.

@RestController
public class EventController {

    Logger logger = LoggerFactory.getLogger(EventController.class);

    @GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux getNumbers() {
        Random r = new Random();
        int min = 0;
        int max = 32767;
        return Flux.fromStream(Stream.generate(() -> r.nextInt(max - min) + min)
            .map(s -> String.valueOf(s))
            .peek((msg) -> {
                logger.info(msg);
            }))
            .map(s -> Integer.valueOf(s))
            .delayElements(Duration.ofSeconds(1));
    }
}

Обратите внимание, что метод getnumber() выдает ЗНАЧЕНИЕ TEXT_EVENT_STREAM_VALUE . Это указывает на то, что система отправляет данные в виде событий, отправленных сервером, или SSE.

Создание клиента реактивных событий

Для следующего шага мы собираемся создать реактивный EventClient:

public class EventClient {

    Logger logger = LoggerFactory.getLogger(EventClient.class);

    @Bean
    WebClient getWebClient() {
        return WebClient.create("http://localhost:8081");
    }

    @Bean
    CommandLineRunner demo(WebClient client) {
        return args -> {
            client.get()
                .uri("/events")
                .accept(MediaType.TEXT_EVENT_STREAM)
                .retrieve()
                .bodyToFlux(Integer.class)
                .map(s -> String.valueOf(s))
                .subscribe(msg -> {
                    logger.info(msg);
                });
        };
    }
}

Поскольку мы ожидаем потока событий, нам нужно использовать метод body To Flux() , чтобы вернуть правильный ответ.

Теперь мы запускаем приложение Spring Boot. Каждую секунду , система будет генерировать и печатать случайные числа на консоли.

На этом простом примере мы можем наблюдать самые основные функции потоковой передачи событий в реальном времени с использованием Spring Web Flux.

В заключение, реактивное программирование состоит в том, чтобы рассматривать все как поток элементов, следовательно, оно позволяет выполнять операции над этим потоком и передавать его клиенту таким образом, чтобы он работал асинхронно, и Spring WebFlux является отличным вариантом для рассмотрения, если наши задачи требуют этих возможностей.

Оригинал: “https://dev.to/dariocarrasquel/a-short-example-of-real-time-event-streaming-using-spring-webflux-5a81”