스프링 부트 #4.8-9 Graceful/RSocket
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #4.7 웹 애플리케이션 개발
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #4.5-6 국제화/JSON
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #4.3-4 프로필/로깅
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #4.2 외부화된 구성
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #4.1 스프링 애플리케이션
2020/06/14 - [IT/SpringBoot] - 스프링 부트 #3. 사용
4.8. 우아한 셧다운
우아한 종료는 네 개의 임베디드 웹 서버(부두, 원자로 쐐기풀, 톰캣 및 언더토우)와 반응성 및 Servlet 기반 웹 애플리케이션모두에서 지원됩니다. 응용 프로그램 컨텍스트를 닫는 일부로 발생하며 원두를 중지하는 초기 단계에서 수행됩니다. 이 중지 처리는 기존 요청을 완료할 수 있지만 새 요청은 허용되지 않는 유예 기간을 제공하는 시간 시간을 사용합니다. 새 요청이 허용되지 않는 정확한 방법은 사용 중인 웹 서버에 따라 다릅니다. 부두, 원자로 쐐기풀 및 Tomcat는 네트워크 계층에서 요청을 수락하지 않습니다. Undertow는 요청을 수락하지만 서비스를 사용할 수 없는 (503) 응답으로 즉시 응답합니다.SmartLifecycle
Tomcat와 우아한 종료는 톰캣 9.0.33 이상을 필요로한다. |
우아한 종료를 사용하도록 설정하려면 다음 예제와 같이 속성을 구성합니다.server.shutdown
server.shutdown=graceful
시간 시간 표시 기간을 구성하려면 다음 예제와 같이 속성을 구성합니다.spring.lifecycle.timeout-per-shutdown-phase
spring.lifecycle.timeout-per-shutdown-phase=20s
4.9. R소켓
RSocket은 바이트 스트림 전송에 사용할 수 있는 이진 프로토콜입니다. 단일 연결을 통과하는 비동기 메시지를 통해 대칭 상호 작용 모델을 사용할 수 있습니다.
Spring Framework의 모듈은 클라이언트와 서버 측면에서 RSocket 요청자 및 응답자에 대한 지원을 제공합니다. RSocket 프로토콜개요를 포함하여 자세한 내용은 Spring Framework 참조의 RSocket 섹션을 참조하십시오.spring-messaging
4.9.1. RSocket 전략 자동 구성
Spring Boot는 RSocket 페이로드를 인코딩하고 디코딩하는 데 필요한 모든 인프라를 제공하는 콩을 자동으로 구성합니다. 기본적으로 자동 구성은 다음을 순서대로 구성하려고 시도합니다.RSocketStrategies
- 잭슨과 CBOR 코덱
- 잭슨과 JSON 코덱
스타터는 두 종속성을 모두 제공합니다. 사용자 지정 가능성에 대해 자세히 알아보십시오.spring-boot-starter-rsocket
개발자는 인터페이스를 구현하는 빈을 만들어 구성 요소를 사용자 지정할 수 있습니다. 코덱의 순서를 결정하기 때문에 중요합니다.RSocketStrategies
RSocketStrategiesCustomizer
@Order
4.9.2. RSocket 서버 자동 구성
스프링 부트은 RSocket 서버 자동 구성을 제공합니다. 필요한 종속성은 .spring-boot-starter-rsocket
스프링 부트을 사용하면 웹플럭스 서버에서 웹소켓에 RSocket을 노출하거나 독립적인 RSocket 서버를 서 있는 것을 허용합니다. 이는 응용 프로그램 유형과 구성에 따라 다릅니다.
WebFlux 응용 프로그램(예: 유형)의 경우 RSocket 서버는 다음 속성이 일치하는 경우에만 웹 서버에 연결됩니다.WebApplicationType.REACTIVE
spring.rsocket.server.mapping-path=/rsocket # a mapping path is defined
spring.rsocket.server.transport=websocket # websocket is chosen as a transport
#spring.rsocket.server.port= # no port is defined
RSocket 자체가 해당 라이브러리로 빌드되어 있기 때문에 RSocket을 웹 서버에 연결하면 Reactor Netty에서만 지원됩니다. |
또는 RSocket TCP 또는 웹소켓 서버가 독립적인 임베디드 서버로 시작됩니다. 종속성 요구 사항 외에도 필요한 유일한 구성은 해당 서버에 대한 포트를 정의하는 것입니다.
spring.rsocket.server.port=9898 # the only required configuration
spring.rsocket.server.transport=tcp # you're free to configure other properties
4.9.3. 스프링 메시징 RSocket 지원
스프링 부트은 RSocket에 대한 스프링 메시징 인프라를 자동으로 구성합니다.
즉, 스프링 부트은 응용 프로그램에 대한 RSocket 요청을 처리하는 콩을 만듭니다.RSocketMessageHandler
4.9.4. RSocket요청기와 RSocket 서비스 호출
서버와 클라이언트 간에 채널이 설정되면 모든 당사자가 다른 당사자에게 요청을 보내거나 받을 수 있습니다.RSocket
서버로 RSocket의 모든 처리기 메서드에 인스턴스를 주입할 수 있습니다. 클라이언트는 RSocket 연결을 먼저 구성하고 설정해야 합니다. 스프링 부트은 예상 코덱을 통해 이러한 경우에 대해 자동으로 구성합니다.RSocketRequester
@Controller
RSocketRequester.Builder
인스턴스는 프로토타입 콩이므로 각 주입 지점이 새 인스턴스를 제공합니다. 이 빌더는 상태 상태이므로 동일한 인스턴스를 사용하여 서로 다른 설정을 가진 요청자를 만들어서는 안 됩니다.RSocketRequester.Builder
다음 코드에는 일반적인 예제가 표시됩니다.
@Service
public class MyService {
private final Mono<RSocketRequester> rsocketRequester;
public MyService(RSocketRequester.Builder rsocketRequesterBuilder) {
this.rsocketRequester = rsocketRequesterBuilder
.connectTcp("example.org", 9898).cache();
}
public Mono<User> someRSocketCall(String name) {
return this.rsocketRequester.flatMap(req ->
req.route("user").data(name).retrieveMono(User.class));
}
}
Spring Boot Reference DocumentationPhillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave, Eddú Meléndez, Scott FrederickLegal2.3.1.RELEASE Copyright © 2012-2020 Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically. |