응답 형 프로그래밍은 최근 몇 년 동안 개발자 커뮤니티와 고객들 사이에서 인기가 높았습니다. 최근에 더 민감하고 탄력적 인 응용 프로그램을 형성하기보다는 선언적 방식으로 응용 프로그램을 구축 할 수 있습니다. Spring 5가 반응 시스템을 핵심 프레임 워크에 통합한다는 사실은 선언 프로그래밍으로의 패러다임 전환을 보여주었습니다.
응답 형 프로그래밍은 데이터 제작자와 소비자 간의 비동기 데이터 흐름을 관리하며, 이는 부드러운 방식으로 데이터에 응답해야합니다. 따라서 반응 형 프로그래밍은 비동기적이고 이벤트 중심의 원활한 애플리케이션으로, 소수의 스레드를 확장해야합니다.
반응 형 프로그래밍은 공유 된 돌연변이 상태, 스레드 및 잠금을 기반으로 응용 프로그램의 확장과 관련된 높은 복잡성으로 인해 스레드 기반 아키텍처를 구축하기가 어렵습니다.
응답 형 프로그래밍의 맥락에서,“스트림에 데이터가있을 때 모든 것이 스트림이며 부드러운 방식으로 동작합니다.”
높은 수준의 추상화 및 응답 형 프로그래밍은 코드 가독성이 향상되므로 개발자는 주로 비즈니스 로직을 정의하는 이벤트의 상호 의존성에 초점을 맞출 수 있습니다.
동시 환경에서 응답 패턴은 자연스럽게 메시지 처리에 적합하며 이는 일반적인 엔터프라이즈 사용 사례입니다.
실행 배압의 특성으로 인해 반응 형 접근 방식은 생산자와 소비자 간의 트래픽을 제어하는 데 가장 적합하여 메모리 소진을 피할 수 있습니다.
하나 또는 여러 개의 스레드의 경우, IO 바인딩 작업은 현재 스레드를 차단하지 않고 비동기 적으로 비동기 및 비 블로킹을 실행할 수 있습니다.
다중 연결 서브 시스템의 알림은 높은 상호 작용 및 실시간 응용 프로그램 또는 모든 작업/이벤트에서 트리거 될 수 있으며,이 경우 응답 형 프로그래밍을보다 효율적으로 관리 할 수 있습니다.
"응답 흐름"은 작업을 정의하는 메소드를 공개하는 최소한의 인터페이스 세트를 포함하는 API 사양을 정의합니다.
역압이 도입되면 응답 흐름을 통해 사용자는 게시자의 데이터 환율을 제어 할 수 있습니다.
응답 스트리밍 API java.util.concurrent.flow는 공식적으로 Java 9의 일부가되었습니다.
응답 스트림은 주로 상호 운용성 층으로 사용됩니다.
Spring-Web-Reactive Module과 Spring MVC는 모두 동일한 @Controller 프로그래밍을 지원하지만 Spring-Web-Reactive는 반응성 및 비 블로킹 엔진 모두에서 실행됩니다.
이 문서를 따르십시오.
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-framework-reference/html/web-reactive.html
Spring-Web-Reactive Module 및 Spring MVC는 많은 일반적인 알고리즘을 공유하지만 Spring-Web-Reactive 모듈은 핸드 레이핑 및 핸들러 라디 랩터와 같은 많은 스프링 MVC 계약을 재정의 및 비 블로킹하고 HTTP 요청 (ROUTTP 및 직무 형태)을 가능하게하기 위해 많은 스프링 MVC 계약을 재정의했습니다.
기존 RestTemplate 외에도 새로운 반응성 웹 클라이언트가 봄 5에 도입됩니다.
반응 형 프로그래밍을 지원하는 HTTP 클라이언트 (예 : Reactor, Netty, Undertow)는 요청 및 응답 본문을 Flux <Databuffer>로 노출시키는 일련의 응답 클라이언트 및 ClientHttPresponse 추상화를 채택하고 읽기 및 쓰기 측면에서 포괄적 인 역압 지원을 제공했습니다.
Spring 5 프레임 워크는 반응성 스트림 사양의 구현으로 원자로를 소개합니다.
Reactor는 JVM에 비 차단 응용 프로그램을 구축하기위한 차세대 반응 라이브러리입니다.
Reactor는 기본 Reactive Streams Publisher 계약을 확장하고 Flux 및 Mono API 유형을 정의하여 각각 0..N 및 0..1의 데이터 시퀀스에 대한 선언적 작업을 제공합니다.
Spring Web Reactive는 Servlet 3.1을 사용하여 비 차단 I/O를 제공하고 Servlet 3.1 컨테이너에서 실행됩니다.
Spring Webflux는 선택할 수있는 두 가지 프로그래밍 모델을 제공합니다.
Spring 5에는 스프링 웹 반응성 (스프링 웹 반응 모듈 아래)과 스프링 웹 MVC (Spring-Webmvc 모듈 아래)가 포함됩니다.
Spring Web Reactive 및 Spring Web MVC 모듈은 많은 알고리즘을 공유하지만 Spring Web Reactive는 반응 형 비 차단 반응 스트림 HTTP 어댑터 레이어에서 실행될 수 있기 때문에 이들 사이에 코드를 공유하지 않습니다.
Spring MVC 실행에는 서블릿 컨테이너가 필요하고 Spring Web Reactive는 Netty 및 Undertow와 같은 비 서비스 런타임에서도 실행될 수 있습니다.
가볍고 기능적인 웹 프레임 워크가있는 비 차단 웹 스택을 사용하여 Java 8 Lambda 또는 Kotlin과 함께 사용해야하는 경우 Spring MVC 응용 프로그램에서 스프링 웹 반응성으로 전환해야합니다.
이것은 webfiux에 의존하는 2.0.0 m5 버전의 pom.xml입니다.
<부모> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-starter-parent </artifactid> <bersion> 2.0.0.m5 </parent> <pecient independies> <pelection> <groupid> org.springframework.boot> <artifactid> Spring-Boot-starter-webflux </artifactid> </fectionency> </decomencies>
전통적인 방법 대 응답 방법
전통적인 방법에서는 실행이 차단되고 서비스 실행이 완료 될 때까지 기다립니다. 다음 코드에서는 첫 번째 인쇄 명령문 후에 프로그램 실행이 차단되고 서비스 실행이 완료되기를 기다립니다. 서비스 실행이 완료되면 프로그램 실행이 재개되고 두 번째 인쇄 문이 실행됩니다.
@GetMapping ( "/Contricaul") 공개 목록 <Product> getAllProducts () {System.out.println ( "전통적인 방법 시작"); List <Product> Products = ProducerService.getProducts ( "전통"); System.out.println ( "전통적인 방법 완료"); 제품 반품;}응답 방법에서는 서비스 실행 완료를 기다리지 않고 프로그램 실행이 계속됩니다. 다음 코드에서, 첫 번째 인쇄문 이후, 두 번째 인쇄 문은 서비스 실행이 완료되기를 기다리지 않고 차단 방식으로 실행됩니다. 플럭스 스트림에는 제품 데이터의 가용성으로 채워집니다.
@getMapping (value = "/reactive", .text_event_stream_value) public flux <product> getall () {System.out.println ( "플럭스 시작을 사용한 반응 방식"); flux <product> fluxproducts = prodservice.getProductSstream ( "flux"); System.out.println ( "플럭스 완성 된 반응 방식"); 리턴 플럭스 제품;}기존 RestTemplate 외에도 Spring 5는 반응성 웹 클라이언트를 도입했습니다.
ClientHttpRequest 및 ClientHttPresponse 추상화는 Flux <databuffer>를 사용하여 요청 및 응답 기관을 노출시키고 읽기 및 쓰기 측면에서 전체 역압 지원을 제공합니다.
스프링 코어로부터의 인코더 및 디코더 추상화는 클라이언트 측에서 Endian FLUS를 유형 객체로 직렬화하거나 전송하는 데 사용됩니다.
다음은 터미널을 호출하고 반응 스트림 플럭스 객체를 수신하고 처리하는 반응성 웹 클라이언트의 예입니다.
@getMapping ( "/convers/{id}/alerts") public flux <alert> getAccountalerts (@pathvariable long id) {webClient webClient = new WebClient (new ReactTorClientHttpConnector ()); replice this.repository.getAccount (id) .flatmap (계정 -> webclient.perform (get ( "/alerts/{key}", ac위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.