首页 > 解决方案 > 从反应式 Spring Boot 应用程序调用非反应式遗留服务?

问题描述

我正在大量使用基于 webflux 的 Spring Boot 应用程序。我面临的问题是我必须调用一项服务,这是一个传统的 Spring Boot 应用程序,并且不是响应式的!

这是一个示例端点,它接近所述遗留系统的想法:

@RequestMapping(value = "/people/**", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getPerson(HttpServletRequest request) {
    String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    String key = new AntPathMatcher().extractPathWithinPattern(pattern, request.getRequestURI());
    
        return personService.getPersonByKey(key);
    }


我知道我无法通过此实现真正的反应性优势,我可以在这里实现无阻塞和阻塞的快乐媒介吗?

谢谢

标签: spring-bootspring-webfluxreactor

解决方案


当您使用WebClient从 Spring WebFlux 应用程序调用服务时,它将以 Reactive 非阻塞方式工作。这意味着您可以在您的应用程序上实现真正的响应式优势。在上游服务返回响应之前,线程不会被阻塞。

下面是使用 WebClient 调用服务的示例代码:

WebClient webClient = WebClient.create("http://localhost:8080");

Mono<Person> result = webClient.get()
    .uri("/people/{id}")
    .retrieve()
    .bodyToMono(Person.class);

推荐阅读