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

如何设计具有外部阻塞API调用的反应式微服务?

笪欣嘉
2023-03-14

我有一些微服务,应该可以在WebFlux框架上运行。每台服务器都有自己的带有Mono或Flux的API。我们使用的是Spring支持的MongoDB(Spring数据MongoDB)。

问题是外部阻塞API,我必须在我的系统中使用它。

我有一个解决办法。我可以在专用线程池中封装阻塞API调用,并在CompletableFuture中使用它。

还有别的办法解决我的问题吗?我想,那个全新的Rsocket解决不了我的问题。

共有3个答案

萧渝
2023-03-14

RSocket应该是一款完美的入门教程

https://www.baeldung.com/spring-boot-rsocket

https://spring.io/blog/2020/04/06/getting-started-with-rsocket-spring-boot-channels

益泰平
2023-03-14

我不明白为什么不能在Flux或Mono中包装阻塞API调用。如果演员模型对您来说更容易,您也可以将Akka与Spring集成。

施德运
2023-03-14

1.如果可能,您可以使用WebClient类将阻塞API调用更改为反应方式。

参考文献:

  1. 参考指南
  2. WebClient API
  3. 一个简单、完整的样本

2.如果阻塞API不能更改为反应API,我们应该有一个专用的、经过良好调优的线程池,并在那里隔离阻塞代码。这里还有一个例子。

 类似资料:
  • 最近,我使用回调结构实现了一个带有Quarkus/Multiny的反应式REST GETendpoint; 使用 Quarkus/Mutiny 将 MyRequestService 连接到 Reactive REST GET endpoint 完成后,我想知道如何通过调用阻止服务来解决这个问题; 我如何用quar kus/哗变从我的反应式REST GETendpoint调用阻塞服务

  • 在我们的项目中,我们使用Spring cloud Eureka作为服务注册中心。当我们使用ribbon客户端调用内部微服务时,所有URL都通过Eureka解析。。。调用外部URL是个问题。由于外部API是老式的,所以使用Feign似乎不是一个好选择。 从这样的服务调用外部URL的最佳方式是什么? 提前谢谢 帕特里斯

  • 应用程序: 接收以下有效负载: 我需要按以下方式进行处理: > 使用转换后的数据向“卡通数据库”微服务发送HTTP POST请求。 我遇到的问题是: 我需要使用(|)和)的

  • 我正在尝试构建一个worker verticle,通过采用kotlin的PubSub示例,结合这个关于worker无限阻塞循环处理的答案,将Google cloud PubSub主题订阅与vert.x的事件总线连接起来。 它确实有效,但Vert. X在收到来自PubSub的消息后的某个时间通过抛出异常来不断唠叨的日志(请暂时忽略阻止初始化): 这是源代码: 我显然错过了一些东西。此外,如果您有更好

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

  • 我能想到的一个办法是: > 将我的一个sails.js应用程序分解为多个小的sails.js子项目/存储库。 在一个子项目中有一个控制器模型。例如,如果我们考虑具有用户、产品、订单等实体的简单电子商务应用程序,那么每个应用程序都将有单独的sails.js存储库,并具有各自的sails.js模型控制器。那么这个单一的子存储库将从我的一个微服务。 用SAIL.js实现服务间通信的最佳方法是什么?如果用