【问题标题】:Calling a non-reactive legacy service from reactive spring boot app?从反应式 Spring Boot 应用程序调用非反应式遗留服务?
【发布时间】:2021-01-15 13:41:25
【问题描述】:

我正在大量使用基于 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);
    }


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

谢谢

【问题讨论】:

  • 如果你在你的WebFlux应用中使用WebClient调用传统的spring boot app应该没问题。 WebClient 以不阻塞的方式实现,在调用传统的 Spring MVC 应用程序时也是如此。阅读更多:stackoverflow.com/questions/55939068/…

标签: spring-boot spring-webflux reactor


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2020-05-20
    • 1970-01-01
    • 2020-12-23
    • 2020-04-29
    • 2021-06-12
    • 2021-12-11
    • 2020-04-29
    • 2020-11-04
    相关资源
    最近更新 更多