Reactive Feign
현재 진행중인 프로젝트에서 일부 구간은 ReactiveStreams를 적용하려 하였다.
이때 Spring Cloud Open Feign으로 통신하는 구간도 Reactive 형태로 지원을 해줘야하는데, 공식 레퍼런스에서는 현재 지원하지 않는다고 한다.
![]() 하지만 feign-reactive를 추천해준다고 하여 링크로 이동하게 되면 spring framework에서 의존성 라이브러리들을 확인할 수 있고, pom.xml을 열어보면 필요 라이브러리들을 알 수 있다.
![]() Maven 설정
com.playtika.reactivefeign feign-reactor-spring-configuration com.playtika.reactivefeign feign-reactor-cloud com.playtika.reactivefeign feign-reactor-webclient Gradle 설정
implementation 'com.playtika.reactivefeign:feign-reactor-spring-configuration:2.0.22' implementation 'com.playtika.reactivefeign:feign-reactor-cloud:2.0.22' implementation 'com.playtika.reactivefeign:feign-reactor-webclient:2.0.22' 여기서 좀 특이한점이 ‘org.springframework.boot:spring-boot-starter-webflux’ 를 의존성으로 걸 필요가 없다는 것이다.
예제 프로젝트는 아래 링크를 확인하면 된다.
https://github.com/audtjddld/feign-reactive-sample
(추가적인 예제는 나중에 올려보도록한다.)
@SpringBootApplication @EnableEurekaClient @RestController @EnableReactiveFeignClients @EnableFeignClients public class FeignApplication { ... } 구동 설정은 위와 같이 설정한다.
@EnableReactiveFeignClients @EnableFeignClients Mono, Flux를 사용하기 때문에 자연스럽게 @EnableWebFlux를 같이 걸어주게 되면 오류가 발생된다.
Caused by: java.lang.IllegalStateException: The Java/XML config for Spring MVC and Spring WebFlux cannot both be enabled, e.g. via @EnableWebMvc and @EnableWebFlux, in the same application. at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.reactive.config.WebFluxConfigurationSupport.setApplicationContext(WebFluxConfigurationSupport.java:101) ~[spring-webflux-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:123) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:100) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:415) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE] ... 61 common frames omitted
WebFlux 설정은 빼서 설정해주면 된다.
그 밖의 Feing Client는 아래와 같이 작성해주면 된다.
@ReactiveFeignClient(name = "web-flux-app") public interface GreetingReactive { @GetMapping("/greeting") Mono greeting(); @GetMapping("/greetingWithParam") Mono greetingWithParam(@RequestParam(value = "id") Long id); }
This article is licensed under CC BY 4.0 by the author.