一、什么是服务通信

在单体架构时代,所有代码、逻辑、数据库都放在同一个项目里,模块之间直接调用方法,不需要网络通信。

但到微服务架构中,系统会拆分成多个独立部署的服务,比如用户服务、订单服务、支付服务、消息通知服务。每个服务都是独立进程,拥有独立数据库。

服务通信,就是各个微服务之间通过网络互相调用、传输、交互数据的过程。简单来说:服务拆分后,服务之间互相传递数据、调用功能,就是服务通信。

服务通信是分布式、微服务架构的核心基础,如果没有服务通信,各个服务只是孤立程序,无法协同完成业务。

 二、服务通信两大分类

微服务通信整体分为两类:同步通信、异步通信。

 三、同步通信(Sync)

1. 核心特点

客户端发起调用后,必须等待服务端返回结果,才能继续执行后续逻辑。 优势:实时性高、业务流程直观; 缺点:强耦合,调用依赖对方服务必须在线、可用。

2. 主流技术方案

1. RESTful API(HTTP)

搭配resttemplate、open feign,是spring cloud最常用方案。

2. gRpC

基于rPC、protobuf,高性能,跨语言适配。

3. dubbo rpc

Java生态经典高性能RPC框架。

3. 适用业务场景

适合必须立刻拿到返回结果的业务:

下单时校验用户信息、支付前查询账户余额、登录校验、权限查询。

4. 同步通信完整执行流程

1. 订单服务发起调用,请求用户服务接口

2. 订单服务阻塞,等待用户服务响应

3. 用户服务处理完成,返回数据

4. 订单服务拿到结果,继续执行后续业务

四、异步通信(async)详解

1. 核心特点

生产者发送消息之后,不需要等待对方处理完成,发送后直接结束当前流程,后续业务由消费者异步处理。 优势:服务解耦、削峰限流、高可用; 缺点:无法实时拿到执行结果,流程追踪更复杂。

2. 主流技术方案

rabbitMQ、rocketMQ、kafka等消息中间件。

3. 适用业务场景

不需要即时响应的后置操作:

下单成功发送短信通知、订单完成推送物流消息、用户注册发放优惠券、日志收集统计。

4. 异步通信完整执行流程

1. 订单创建完成,业务代码发送消息到消息队列

2. 订单服务不用等待,直接完成自身流程

3. 消息通知服务监听队列,获取消息

4. 通知服务独立处理短信、推送逻辑

五、同步与异步通信核心对比

|对比维度|      同步通信|                          异步通信|

|调用逻辑|      等待返回结果|                   发完消息直接结束|

|服务耦合度   高耦合,依赖服务在线|     完全解耦,互不阻塞|

|实时性           实时响应|                         无实时返回,延迟处理|

|容错能力|     一方宕机直接调用失败|     消息持久化,宕机可重试|

|典型组件|      open feign、dubbo|          rabbitMQ、kafka|

 六、业务选型总结

1. 必须实时获取返回数据、强交互场景,选用同步通信(HTTP/RPC);

2. 后置通知、数据同步、流量削峰、非实时任务,选用异步消息通信;

3. 实际项目大多两者搭配使用,核心流程同步,附属通知、统计类逻辑异步。 

更多推荐