一、什么是服务通信
在单体架构时代,所有代码、逻辑、数据库都放在同一个项目里,模块之间直接调用方法,不需要网络通信。
但到微服务架构中,系统会拆分成多个独立部署的服务,比如用户服务、订单服务、支付服务、消息通知服务。每个服务都是独立进程,拥有独立数据库。
服务通信,就是各个微服务之间通过网络互相调用、传输、交互数据的过程。简单来说:服务拆分后,服务之间互相传递数据、调用功能,就是服务通信。
服务通信是分布式、微服务架构的核心基础,如果没有服务通信,各个服务只是孤立程序,无法协同完成业务。
二、服务通信两大分类
微服务通信整体分为两类:同步通信、异步通信。
三、同步通信(Sync)
1. 核心特点
客户端发起调用后,必须等待服务端返回结果,才能继续执行后续逻辑。 优势:实时性高、业务流程直观; 缺点:强耦合,调用依赖对方服务必须在线、可用。
2. 主流技术方案
1. RESTful API(HTTP)
搭配RestTemplate、OpenFeign,是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. 通知服务独立处理短信、推送逻辑
五、同步与异步通信核心对比
|对比维度| 同步通信| 异步通信|
|调用逻辑| 等待返回结果| 发完消息直接结束|
|服务耦合度| 高耦合,依赖服务在线| 完全解耦,互不阻塞|
|实时性 |实时响应| 无实时返回,延迟处理|
|容错能力| 一方宕机直接调用失败| 消息持久化,宕机可重试|
|典型组件| OpenFeign、Dubbo| RabbitMQ、Kafka|
六、业务选型总结
1. 必须实时获取返回数据、强交互场景,选用同步通信(HTTP/RPC);
2. 后置通知、数据同步、流量削峰、非实时任务,选用异步消息通信;
3. 实际项目大多两者搭配使用,核心流程同步,附属通知、统计类逻辑异步。