В последние годы отзывчивое программирование было популярно среди сообщества разработчиков и клиентов благодаря своей способности создавать приложения декларативным образом, а не заставляя их сформировать более чувствительные и устойчивые приложения. Тот факт, что Spring 5 включает в себя реакционные системы в свою основную структуру, показал сдвиг парадигмы к декларативному программированию.
Адаптивное программирование управляет асинхронными потоками данных между производителями данных и потребителями, которые должны реагировать на данные плавно. Следовательно, отзывчивое программирование-это плавное приложение, которое является асинхронным и управляемым событиями, требующим небольшого количества потоков для масштабирования.
Адаптивное программирование трудно создать архитектуру на основе потоков из-за высокой сложности, связанной с расширением приложений на основе общих изменяемых состояний, потоков и замков.
В контексте адаптивного программирования «когда есть данные в потоке, все является потоком и ведет себя плавно».
Абстракция высокого уровня и адаптивное программирование приводят к улучшению читаемости кода, поэтому разработчики могут сосредоточиться в основном на взаимозависимости событий, которые определяют бизнес-логику.
В очень параллельных средах шаблон отклика, естественно, подходит для обработки сообщений, который является общим вариантом использования предприятия.
Благодаря характеру обратного давления исполнения, отзывчивый подход лучше всего подходит для контроля трафика между производителями и потребителями, что поможет избежать истощения памяти.
Для одного или нескольких потоков задачи привязки IO можно выполнить асинхронно и не блокировать, не блокируя текущий поток.
Уведомления о нескольких подсистемах соединения могут быть запускаются в приложениях с высоким взаимодействием и в реальном времени или в любых операциях/событиях, и в этом случае программирование отзывчивого случая может быть более эффективно управлять.
«Поток отклика» определяет спецификацию API, которая содержит минимальный набор интерфейсов, которые раскрывают методы определения операций и объектов потоков данных, которые не являются блокирующими обратным давлением.
С введением обратного давления поток отклика позволяет пользователю управлять обменным курсом данных от издателя.
Ответ потоковой API java.util.concurrent.flow официально стал частью Java 9.
Поток отклика в основном используется в качестве уровня взаимодействия.
Как модуль Spring-Web-реактивного, так и Spring MVC поддерживают одно и то же программирование @controller, но Spring-web-реактивность выполняется как на реактивных, так и на неблокирующих двигателях.
Следуйте этому документу, см.:
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-frame-reference/html/web-reactive.html
Модуль и пружина MVC-реактивного, отвечающего пружин, имеют много общих алгоритмов, но модуль Spring-Web-реактивного, переопределяющий многие пружинные контракты MVC, такие как ручное время и гандлердаптер, чтобы сделать их асинхронными и не блокирующими, а также для реагирования HTTP-запросов и ответов (в форме routerfunction и handlplunction).
В дополнение к существующему Resttemplate, в Spring 5 также представлен новый отзывчивый WebClient.
Клиенты HTTP, которые поддерживают адаптивное программирование (например, Reactor, Netty, Undertow), приняли серию отзывчивых клиентских абстракций и клиентских абстракций, которые разоблачают запросы и тела ответов в качестве Flux <databuffer> и обеспечивают полную поддержку обратного потока на стороне чтения и записи.
Spring 5 Framework представляет реактор в качестве реализации спецификации реактивных потоков.
Реактор является реактивной библиотекой следующего поколения для создания неблокирующих приложений на JVM.
Реактор расширяет базовый контракт издательских потоков реактивного потока и определяет типы Flux и Mono API, чтобы обеспечить декларативные операции для последовательностей данных 0..n и 0..1 соответственно.
Spring Web Reactive использует Servlet 3.1 для предоставления неблокирующего ввода-вывода и работает на контейнерах Servlet 3.1.
Spring Webflux предлагает две модели программирования на выбор.
Spring 5 включает в себя Spring Web Reactive (под модулем Spring-Web-реактивного) и Spring Web MVC (под модулем Spring-Webmvc).
Хотя модули Spring Web Reactive и Spring Web MVC имеют много алгоритмов, поскольку Spring Web Reactive может работать на отзывчивых неблокирующих реактивных потоках HTTP-адаптер, они не делятся кодом между ними.
Для выполнения Spring MVC требуется контейнер сервлета, в то время как Spring Web Reactive также может работать в неэнергии, например, на Netty и Infertow.
Если вам нужно использовать неблокирующий веб-стек с легкой, функциональной веб-структурой и использовать его с Java 8 Lambda или Kotlin, вам следует рассмотреть возможность переключения с приложений Spring MVC на Spring Web Reactive.
Это версия Pom.xml 2,0,0 M5, которая опирается на WebFiux.
<parent> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-Boot-Starter-parent </artifactid> <sersive> 2.0.0.m5 </version> </parent> <DepectiveS> <deyedency> <groupid> org.spramework.boot </GroupD> </Зависимость> </зависимости>
Традиционный метод и метод ответа
В традиционных методах выполнение будет заблокировано и будет ждать, пока ваша служба будет завершена. В следующем коде, после первого оператора печати, выполнение программы будет заблокировано и ожидает завершения выполнения службы. После завершения выполнения службы выполнение программы возобновится и выполняется второй оператор печати.
@Getmapping ("/trantaving") public list <drop> getallproducts () {system.out.println ("Традиционный способ начал"); Список <drop> products = ProducterService.getProducts («традиционный»); System.out.println («Традиционный путь завершен»); возвращать продукты;}В методе ответа выполнение программы будет продолжаться, не ожидая завершения выполнения услуг. В следующем коде, после первого оператора печати, второй оператор печати будет выполнен не блокирующим манером, не ожидая завершения выполнения службы. Поток потока будет заполнен доступностью данных о продукте.
@Getmapping (value = "/Reactive", .text_event_Stream_Value) Public Flux <drop> getAll () {System.out.println ("Реактивное способ с использованием Flux, запущенным"); Flux <Продукт> FluxProducts = prodservice.getProductsstream ("flux"); System.out.println («Реактивное способ с использованием потока завершен»); return FluxProducts;}В дополнение к существующему Resttemplate, Spring 5 также представила реактивный WebClient.
Clienthttprequest и Clienthttpresponse Abstractions выставляют тела запроса и ответов, используя Flux <databuffer> и обеспечивают полную поддержку обратного давления как на стороне чтения, так и на стороне записи.
Абстракции энкодера и декодера от Spring Core также используются на стороне клиента для сериализации или передачи эндсианского фрукта в объекты типа.
Вот пример реактивного веб -клиента, который вызывает терминал и получает и процессы объектов реактивного потока.
@Getmapping ("/accostments/{id}/alerts") public flux <lelert> getAccountalerts (@pathvariable long id) {webclient webclient = new webclient (new ReactorClientHttpConnector ()); вернуть this.repository.getaccount (id) .flatmap (account -> webclient.perform (get ("/alerts/{key}", account.getKey ())). Extract (bodyStream (alert.class));}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.