问题描述
我正在大量使用基于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);