微服务之间怎么通信:REST、RPC 还是消息队列

举报
柠檬-夏日清爽 发表于 2026/10/09 09:47:15 2026/10/09
【摘要】 拆成微服务后,第一个要决的问题就是"服务之间怎么说话"。REST、RPC、消息队列三种方式各有适用场景,选错要么性能拉胯要么耦合爆炸。聊聊各自的特点和选型思路,配一张三方式对比图。

一、REST / HTTP:最省心的默认选项

image.png

最常见的就是 HTTP 接口互调,JSON 当载体。好处是简单、跨语言、抓个包就能看:

// 服务A 调用 服务B 的订单接口
Order order = restTemplate.getForObject(
    "http://order-svc/orders/" + id, Order.class);

适合对外暴露、或者跨语言协作。缺点是每次都是文本序列化,性能一般;而且是同步的,B 挂了 A 也得跟着等。

二、RPC:内部高频调用的性能派

服务都在自己技术栈内、调用又特别频繁时,RPC(如 gRPC)用二进制协议,比 REST 快不少,还带接口契约、类型安全。代价是和框架绑定更紧,调试不如 HTTP 直观。

三、消息队列:彻底解耦的异步派

上面两种都是"你问我答"的同步模式。有些场景根本不需要立刻回答——比如"下单成功发个通知"“库存变了更新缓存”。这时候用消息队列(Kafka/RocketMQ)把事件丢出去,谁关心谁订阅:

kafkaTemplate.send("order-created", orderEvent); // 发完就走,不等

好处是调用方和被调用方彻底解耦,还能削峰填谷。代价是变"最终一致",链路排查更复杂。

四、怎么选,一张表说清

场景 推荐
对外接口、跨语言 REST
内部高频、低延迟 RPC
事件通知、异步解耦 消息队列
既要同步又要解耦 混合:核心链路 RPC,旁路事件 MQ

小结

没有"最好"的通信方式,只有"最合适"的。我的经验是:默认 REST 起步,内部性能瓶颈出现了再上 RPC,真正需要解耦和异步的地方才引入消息队列。一上来全套 MQ,往往是给自己挖坑。通信方式选对了,微服务才算真正"拆得动",不然就是换了个写法写单体。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。