一、RPC 到底是什么?
RPC(Remote Procedure Call)= 远程过程调用
📌 定义:
让你像调用本地方法一样调用远程服务器上的方法,屏蔽底层网络通信细节。
二、类比理解
本地调用:
javaUser user = userService.getUserById(1);这个方法就在你本地的 JVM 内存中运行,速度飞快。
RPC 调用:
javaUser user = userService.getUserById(1);看起来一样,其实是调用远程服务器上某个服务的方法!
底层流程其实是:
把方法名、参数序列化(变成 JSON 或二进制)
发给远程服务(HTTP、TCP、gRPC 等协议)
远程服务接收并执行这个方法
把结果再返回来(反序列化)
本地方法获取结果,就像真的调用了一样!
三、你该怎么使用 RPC?
你不会手写那么多通信逻辑,你要用 RPC 框架。比如:
RPC 框架 使用方式 协议/底层传输方式 Dubbo 基于注解或接口 TCP、HTTP2 等 gRPC 定义 .proto文件生成代码HTTP2 + Protobuf Spring Cloud OpenFeign 用注解声明接口 HTTP + RESTful
✅ 示例:用 OpenFeign 实现 RPC
服务提供方(用户服务)
java@RestController @RequestMapping("/user") public class UserController { @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return new User(id, "张三"); } }服务调用方(订单服务)
java@FeignClient("user-service") public interface UserClient { @GetMapping("/user/{id}") User getUser(@PathVariable("id") Long id); } // 使用 User user = userClient.getUser(1L);你看起来就是调用
getUser(1L),这就是 RPC。
四、RPC 和 HTTP 有啥区别?
✅ 本质区别:层级不同
对比项 HTTP RPC 是什么 一种网络协议(通信通道) 一种远程调用机制(通信模式) 本质 传输数据用的协议 封装调用远程方法的方式 谁用谁 RPC 框架可能用 HTTP 作为传输协议 HTTP 并不关心你是不是 RPC 开发体验 手动写 URL、参数、解析响应 就像调用本地接口一样 序列化方式 通常是 JSON、XML(可读性好) 可以是二进制(高性能) ✅ 举个例子:
场景 HTTP 调用 RPC 调用(如 Dubbo) 你写的代码 httpClient.get("/user?id=1")userService.getUserById(1)是否自动发现服务 ❌ 你写死了地址 ✅ 框架会自动注册和发现服务 是否自动序列化 ❌ 你自己拼 JSON ✅ 框架自动处理参数和返回值 性能 一般(文本传输) 高(多用二进制+TCP)
五、那我该怎么选择用 RPC 还是 HTTP?
场景 推荐用 理由 前端调用后端服务 HTTP/REST(用 Spring MVC) 简单直观,浏览器支持 服务与服务之间通信(微服务) RPC(如 Dubbo、gRPC、Feign) 开发方便、性能好 跨语言服务通信(如 Java↔Go) gRPC 高性能,支持多语言 需要调试方便、开放接口给第三方 RESTful API + Swagger 直观、通用
六、总结一句话
RPC 是一种远程调用机制,它隐藏了 HTTP 或 TCP 这些通信细节,让你像调用本地函数一样调用远程服务,而 HTTP 是一种通信协议,RPC 框架有可能用 HTTP 实现底层通信。
分布式微服务--RPC:原理、使用方式、与 HTTP/REST 的区别与选择
你我约定有三2025-07-30 12:28
相关推荐
jieyucx2 分钟前
Go 零基础数据结构:顺序表(像「排抽屉」一样学增删改查)曦夜日长2 分钟前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用代码中介商5 分钟前
C++ STL 标准模板库完全指南:从容器到迭代器winner88817 分钟前
C++ 构造函数、析构函数、虚函数、虚析构北山有鸟9 分钟前
IS_ERR 判断出错后,再用 PTR_ERR 把它强制转换回 int 型的错误码作为函数的返回值。格林威13 分钟前
工业视觉检测:提供可视化UI调试工具的实现方式是什么?程序员老邢13 分钟前
【产品底稿 11】架构规整收官:从混乱到清晰,工程结构、表命名、模块分层一次性定型phltxy15 分钟前
深度解析:Spring Cloud Gateway 从入门到实战HAPPY酷20 分钟前
从Public到Private:UE5 C++类创建路径差异全解析AI进化营-智能译站24 分钟前
ROS2 C++开发系列08-传感器数据缓存与指令解析方式之数组、向量与字符串实战