从反应式春季启动应用程式呼叫非反应式旧版服务?

问题描述

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


我知道我无法通过这种方式获得真正的反应性好吗,有没有一种我可以在这里实现的非阻塞和阻塞的快乐媒介?

谢谢

解决方法

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

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...