我有一些微服务,它们应该在 WebFlux 框架之上工作。每个服务器都有自己的带有 Mono 或 Flux 的 API。我们使用的是 Spring 支持的 MongoDB(Spring Data MongoDb Reactive)。
问题是外部阻塞 API,我必须在我的系统中使用它。
我有一个解决方案。我可以将阻塞 API 调用包装在专用线程池中,并将其与 CompletableFuture 一起使用。
还有什么可以解决我的问题吗?我认为,全新的 Rsocket 无法解决我的问题。
我有一些微服务,它们应该在 WebFlux 框架之上工作。每个服务器都有自己的带有 Mono 或 Flux 的 API。我们使用的是 Spring 支持的 MongoDB(Spring Data MongoDb Reactive)。
问题是外部阻塞 API,我必须在我的系统中使用它。
我有一个解决方案。我可以将阻塞 API 调用包装在专用线程池中,并将其与 CompletableFuture 一起使用。
还有什么可以解决我的问题吗?我认为,全新的 Rsocket 无法解决我的问题。
1.如果可能,您可以使用 WebClient 类将阻塞 API 调用更改为反应方式。
参考:
2.如果阻塞API不能改成响应式API,我们应该有一个专用的、调优的线程池,并在那里隔离阻塞代码。这里也有一个例子。
我不明白为什么不能将阻塞 API 调用包装在 Flux 或 Mono 中。如果 Actor 模型对您来说更容易,您也可以将 Akka 与 Spring 集成。
RSocket 应该是一个完美的选择,很好的教程让你开始
https://www.baeldung.com/spring-boot-rsocket
https://spring.io/blog/2020/04/06/getting-started-with-rsocket-spring-boot-channels