当前位置: 首页 > 知识库问答 >
问题:

从反应式spring启动应用程序调用非反应式遗留服务?

杜茂
2023-03-14

我面临的问题是,有一个服务,我必须调用,这是一个传统的Spring启动应用程序,而不是反应性的!

下面是一个示例endpoint,它接近上述遗留系统的想法:

@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);
    }


我知道我不能用这个来实现真正的反应性善,有没有一个快乐的非阻塞和阻塞的媒介我可以在这里实现?

谢谢

共有1个答案

陶博耘
2023-03-14

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

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

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

Mono<Person> result = webClient.get()
    .uri("/people/{id}")
    .retrieve()
    .bodyToMono(Person.class);
 类似资料:
  • 我希望从spring reactive WebClient进行SOAP调用。我找不到任何文件。想知道会有什么方法。现在我在想 null 缺点和其他方法是什么?

  • 导航异步、非阻塞和反应性是一项非常有用的工作。。。给定2个非阻塞、无功、垂直。基于x/quarkus的微服务A和B,其中约束条件是A必须通过http与B通信。如果我想让服务保持被动(非阻塞): 我应该使用Vertex web客户端吗?文档说明它是一个异步客户机,但我假设它是vert。基于x的它也是非阻塞的吗?(我在这里区分异步和非阻塞) 任何帮助都会很好。谢谢

  • 我有一个下面的对象列表,方法返回被动类型

  • 问题内容: 以下是React中的反模式吗?我喜欢这种模式,因为当实例化一个组件时,它在静态函数中为我提供了上下文。然后,我可以导入该类并调用静态方法来修改状态。还是可以通过更好的方式来完成? 问题答案: 显然,这取决于条件,可能是一种反模式,也可能是一个错误。静态类方法不应与类实例一起使用。绑定到特定的组件实例和用途,这只能证明类是单例是合理的(尽管单例也经常是反模式)。如果期望有多个类实例,那么

  • 我正在研究访问HTTP请求和响应体的最佳方式,以便在Spring反应式应用程序中进行跟踪。 对于以前的版本,我们已经利用Servlet过滤器和Servlet请求包装器来使用传入请求的输入流,并保存其副本,以便异步处理跟踪(我们将其发送给Elasticsearch)。 但对于一个Spring反应式应用程序(使用webflux),我想知道在解码之前访问请求的最合适方式是什么。有什么想法吗?

  • 我参与了一个小型测试项目,以检查Spring Reactive Web应用程序实际上是如何与MongoDB一起工作的。 我遵循手册https://docs.spring.io/spring/docs/5.0.0.M4/spring-framework-reference/html/web-reactive.html 它指出我可以在控制器中处理POST请求,例如: 虽然这似乎不起作用。这里是我实现的