首页 > 解决方案 > 如何调用多个服务?

问题描述

当我使用 Armeria 时,我有 3 项服务:

服务 A 调用服务 B 和服务 C。

我应该在 A 的 blockingTaskExecutor 或其他更好的方式中调用 B 和 C 的阻塞存根吗?

标签: armeria

解决方案


让我假设您正在询问 gRPC。在像 Armeria 这样的异步框架中,建议使用非阻塞存根进行调用,这样就没有阻塞调用,因此对其他服务(在您的情况下为服务 B 和 C)的调用都在一个事件中完成循环线程。当其他服务响应不足时,由于更少的上下文切换和更强的鲁棒性,这可能会产生更高的性能。

您可以使用 gRPC-Java 生成的默认存根来执行此操作,但最终结果可能比必要的更复杂,因此我建议使用第三方存根生成器,例如reactive-grpc,它提供与RxJava项目反应堆

如果您正在使用 Kotlin,您可能想尝试一下grpc-kotlin,但请记住,它还处于早期阶段。


推荐阅读