← 每日面试题 学习看板

各个微服务之间,有哪些调用方式?

面试题/02架构设计题/01微服务/各个微服务之间,有哪些调用方式?.md

面试记录 2026-09-27

题目:各个微服务之间,有哪些调用方式?

难度:medium

标签:arch/microservice, network/rpc

评分:⭐⭐☆☆☆(2/5)

我的回答

微服务之间的调用关系,其实核心主要就是两个 RPC 跟 HTTP。其实我使用的情况下,HTTP 偏多,RPC 偏少。HTTP 的话,直接在服务的接口上进行调用即可。不同的服务间进行调用,就是接口间的互相通信,不用做额外的处理。RPC 的话,需要单独设置一下,性能更好一些,但需要单独的实现。

点评

优点:

不足:

补充:

  1. RESTful HTTP + JSON:OpenFeign、Spring WebClient(HTTP/2)
  2. gRPC:Protobuf + HTTP/2,双向流式通信
  3. Dubbo:阿里 RPC 框架,Java 生态成熟
  4. Thrift:Facebook 出品,跨语言
  5. 消息队列:Kafka、RabbitMQ、RocketMQ、Pulsar
  6. GraphQL:查询灵活性,减少往返

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对微服务通信模式的完整认知,不只是列举几个名字,而是理解同步/异步的本质差异和选型权衡。

知识点拆解:

  1. 同步通信:请求-响应模式,调用方阻塞等待返回。
  1. 异步通信:发布-订阅模式,双方解耦。
  1. 反模式:
  1. 选型原则:
递进:先分"同步 vs 异步",再在同步下细分协议,异步下细分 MQ。每种方式的治理策略也不同。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. HTTP 调用为什么还需要治理?"不用额外处理"错在哪?
  1. gRPC 相比 HTTP/JSON 好在哪?
  1. 什么场景必须用异步消息?
  1. Feign 和 RestTemplate 和 WebClient 有什么区别?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,微服务调用方式我按同步 vs 异步两大类来讲。

同步通信:请求-响应,调用方阻塞等待。

异步通信:发布-订阅,解耦。

选型:

同步调用必须有治理:不能"直接调接口"就算了。要设超时(默认不设会线程池打满)、按幂等做重试、配熔断(Sentinel/Hystrix/Resilience4j)、限流、traceId 透传做链路追踪。这几点不做,生产必出问题。