spring-boot - 从反应式 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);
}
我知道我无法通过此实现真正的反应性优势,我可以在这里实现无阻塞和阻塞的快乐媒介吗?
谢谢
解决方案
当您使用WebClient
从 Spring WebFlux 应用程序调用服务时,它将以 Reactive 非阻塞方式工作。这意味着您可以在您的应用程序上实现真正的响应式优势。在上游服务返回响应之前,线程不会被阻塞。
下面是使用 WebClient 调用服务的示例代码:
WebClient webClient = WebClient.create("http://localhost:8080");
Mono<Person> result = webClient.get()
.uri("/people/{id}")
.retrieve()
.bodyToMono(Person.class);
推荐阅读
- azure - Azure SSL 证书标签
- mysql - 我有一个返回太多行的连接
- excel - 将用户表单文本值输入到右侧的下一个空单元格
- javascript - HTML 中的不同类取决于屏幕大小
- google-apps-script - 将来自 Google 表单响应的信息添加到 Google 文档表中的新行
- excel - 将错误 Excel 粘贴到 Powerpoint VBA
- gpu - 我想在 tensorflow lite 中操作使用 gpu 的方式,我可以为此学习什么
- http2 - HTTP/2 `:authority` 标头是否应该包含端口号?
- odoo-8 - 如何在 RML-Odoo v8 中使用“if 条件”
- c - 如何为 openssl bignum 编写通用函数模板?