armeria - 如何调用多个服务?
问题描述
当我使用 Armeria 时,我有 3 项服务:
服务 A 调用服务 B 和服务 C。
我应该在 A 的 blockingTaskExecutor 或其他更好的方式中调用 B 和 C 的阻塞存根吗?
解决方案
让我假设您正在询问 gRPC。在像 Armeria 这样的异步框架中,建议使用非阻塞存根进行调用,这样就没有阻塞调用,因此对其他服务(在您的情况下为服务 B 和 C)的调用都在一个事件中完成循环线程。当其他服务响应不足时,由于更少的上下文切换和更强的鲁棒性,这可能会产生更高的性能。
您可以使用 gRPC-Java 生成的默认存根来执行此操作,但最终结果可能比必要的更复杂,因此我建议使用第三方存根生成器,例如reactive-grpc,它提供与RxJava和项目反应堆。
如果您正在使用 Kotlin,您可能想尝试一下grpc-kotlin,但请记住,它还处于早期阶段。
推荐阅读
- flutter - GridView.count 适应子大小
- c - 我只在使用 h264_cuvid、ffmpeg、libav c 时泄漏内存
- cmd - 为什么我收到一条错误消息“无法打开 hello.docx”
- elastic-stack - 如何在 Filebeat/Metric beat 中创建自定义索引
- python - 删除的记录没有给我他们的 ID
- python - 处理强化学习的非法举动
- android - RecyclerView 中不能有多个 GoogleMap
- c - 为什么“分段错误”仍然是C中的一个东西
- java - .bak 文件干扰 VS 代码
- nasm - 无法在 NASM 中打印数字