RPC 与 Feign 的区别笔记

一、基本概念

1.1 RPC(Remote Procedure Call)

  • 定义:远程过程调用,允许像调用本地方法一样调用远程服务的方法。

  • 本质:跨进程通信,隐藏了底层网络通信的复杂性。

  • 常见实现

    • Java 原生 RMI
    • Dubbo、gRPC、Thrift 等
  • 特性

    • 高性能、二进制传输(如 gRPC 使用 HTTP/2 + Protobuf)
    • 自定义协议支持
    • 强依赖于服务注册中心

1.2 Feign

  • 定义:一个声明式的 Web Service 客户端,常用于 Spring Cloud 中,封装了 HTTP 请求过程。

  • 本质:对 REST 接口的封装,基于 HTTP 协议通信。

  • 特性

    • 面向接口编程
    • 使用注解声明服务接口
    • 支持负载均衡(结合 Ribbon)、熔断(结合 Hystrix 或 Resilience4j)
    • 易于与 Spring Boot 集成

二、架构层级

项目RPCFeign
通信协议通常为 TCP(二进制协议)HTTP/HTTPS(文本协议)
底层技术gRPC、Dubbo、Thrift 等Spring Cloud + HTTP Client
调用方式直接方法调用(更像本地调用)RESTful API
序列化方式Protobuf、Hessian、Thrift 等JSON(默认)/XML

三、使用对比

3.1 性能

  • RPC:二进制传输 + 长连接(如 gRPC 使用 HTTP/2)→ 高性能,适合高并发场景
  • Feign:基于 HTTP + JSON,性能相对较低,适合业务级通信

3.2 易用性

  • Feign:简单上手,注解式开发,符合 Spring Boot 编码习惯
  • RPC:通常需要定义 .proto(gRPC)或接口描述文件,部署和运维稍复杂

3.3 可读性与调试

  • Feign:基于 HTTP,可用 curl/Postman 调试;易于日志追踪
  • RPC:协议定制化强,抓包与调试门槛较高

3.4 跨语言支持

  • RPC:gRPC/Thrift 等有优秀的多语言支持(C++、Go、Python 等)
  • Feign:基于 HTTP 也支持跨语言,但缺乏协议标准化控制

四、Spring Cloud 微服务生态中的作用

组件描述
Feign实现服务间 HTTP 调用
Ribbon(已弃用)客户端负载均衡
Eureka/Nacos服务注册与发现
Hystrix熔断器,增强系统稳定性

⚠️ Spring Cloud Alibaba 推荐使用 OpenFeign + Nacos + Sentinel(替代 Hystrix)等组合。


五、典型使用场景

使用 Feign 的推荐场景

  • 企业内部微服务通信
  • 调用 REST API 接口,特别是跨系统接口
  • 要求开发快速、接口易于理解和调试

使用 RPC 的推荐场景

  • 高性能、高吞吐场景(如音视频、IoT)
  • 对传输协议和序列化方式有特殊要求
  • 多语言异构系统通信

六、代码示例对比

Feign 示例

@FeignClient(name = "user-service")
public interface UserClient {@GetMapping("/users/{id}")UserDTO getUserById(@PathVariable("id") Long id);
}

gRPC 示例(简化)

user.proto
service UserService {rpc GetUserById(UserRequest) returns (UserResponse);
}
Java 代码调用
UserRequest request = UserRequest.newBuilder().setId(1L).build();
UserResponse response = stub.getUserById(request);

七、总结表格

维度RPCFeign
协议TCP/HTTP2/自定义HTTP/HTTPS
传输格式二进制(高效)文本(JSON)
跨语言支持较好(gRPC 等)一般(基于 HTTP)
开发效率相对较低高,Spring Boot 原生支持
调试难度相对较高简单,易调试
性能中等
使用场景内部高性能服务通信微服务 REST 接口调用

八、参考链接

  • Spring Cloud OpenFeign 官方文档
  • gRPC 官方文档
  • Dubbo 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91725.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高防IP能够防御CC攻击吗?它具备哪些显著优势?

摘要: 面对日益复杂的网络攻击,高防IP作为重要的安全工具,不仅能防御常见的DDoS攻击,还能有效应对CC攻击。本文将解析高防IP防御CC攻击的原理及其核心优势,帮助读者了解其在网络安全中的关键作用。一、高防IP能否防御C…

TypeScript 类型注解(一)

一、TypeScript 类型注解1、什么是TpyeScript类型注解- 是否还记得TypeScript的两个重要特性?- 类型系统、适用于任何规模- 可以说,TS的类型系统是TS最重要的功能;那么什么是类型注解呢?其实就是在声明变量时,将变量的…

弗兰肯斯坦式的人工智能与GTM策略的崩溃

2025 年上半年已经明确了一件事:B2B 市场营销团队被工具淹没,但缺乏策略。人工智能无处不在。收入领导者在进行无休止的试点。营销团队拼凑各种点解决方案,希望能实现规模扩张。然而,销售线索的增长停滞不前。信誉正在受损。曾经承…

NAND闪存(NAND Flash)是什么?

NAND闪存(NAND Flash)是什么? NAND闪存(NAND Flash)详解 NAND闪存是一种非易失性存储介质(断电不丢失数据),广泛应用于SSD、U盘、手机存储等设备中。NAND Flash 的全称是 “Negative-AND Flash”(与非型闪存),其名称源自其底层存储单元的电路结构——基于**“与非门…

Android性能优化之UI渲染优化

一、UI渲染核心瓶颈深度解析 1. 渲染管线关键阶段阶段CPU工作GPU工作潜在卡顿点Measure计算View尺寸-嵌套布局多次测量Layout计算View位置-频繁重排(Relayout)Draw构建DisplayList指令集-复杂自定义View.onDraw()Sync & Upload资源上传到GPU内存纹理上传大图/未压缩资源Ras…

基于Spring AI Alibaba的智能知识助手系统:从零到一的RAG实战开发

📖 项目概述 在人工智能快速发展的今天,RAG(Retrieval-Augmented Generation)技术已成为构建智能问答系统的核心技术。本文将详细介绍一个基于Spring AI Alibaba DashScope深度集成的智能知识助手系统的完整开发过程,…

VirtualBox + CentOS:启用 DHCP 获取 IPv4 地址

标题: VirtualBox CentOS:启用 DHCP 获取 IPv4 地址 日期: 2025-07-18 一、问题现象 最小化安装的 CentOS 7 虚拟机里敲: ip addr输出只有 lo 的 127.0.0.1 以及 enp0s3 的 IPv6 链路本地地址,没有 IPv4&#xff0…

Git

Git简介Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种:本地仓库:开发人员自己电脑上的 Git仓库。远程仓库:远程服务器上的 Git 仓库。commit: 提交, 将本地文件和版本…

通信算法之294:LTE系统中的整数倍频偏估计

在LTE系统中,整数倍频偏估计主要通过以下方法实现:一、最大似然估计法(ML)通过遍历预设的整数倍频偏范围(如30kHz),将接收信号与本地的PSS序列在不同频偏点上进行相关运算,选择相关峰…

数字人直播:开启直播行业新纪元​

​原始尺寸更换图片p9-flow-imagex-sign.byteimg.com​​在科技日新月异的当下,直播行业正经历着一场深刻变革,数字人直播的兴起,宛如一颗璀璨新星,照亮了直播领域的新征程。数字人直播,是利用先进的人工智能技术&…

朝鲜升级供应链恶意软件XORIndex,再次瞄准npm生态系统

Socket威胁研究团队最新披露,朝鲜国家支持的黑客组织在"传染性面试"攻击活动中采用了新型恶意软件加载器XORIndex,该恶意程序专门通过npm软件包注册表渗透软件供应链。攻击规模与持续性此次攻击并非孤立事件,而是针对开发者、求职者…

Windows 下 VS2019 编译 libevent-2.1.10 库

1. 你需要VS2019 编译好openssl-1.1.1 ,这个具体编译或者下载可以参考我的博客openssl生成的库是这两个文件接下来,打开CMake ,主要是下面的需要设置好最后Config Generate即可;全部成功生成 22个然后INSTALL右键生成 最后看下生…

Vim多列操作指南

我们在使用 Vim 时,经常需要同时编辑多个文件,或者同一个文件的不同部分。Vim 提供了分割窗口(split)和垂直分割窗口(vsplit)的功能,允许我们在同一个 Vim 会话中查看多个缓冲区(buf…

Python网络爬虫实现selenium对百度识图二次开发以及批量保存Excel

一.百度识图自动上传图片from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By edge_options Options() edge_options.binary_location r"C:\Program Files (x86)\Microsoft\Edge\Applica…

Vue中的refs字段使用记录

这段代码是 Vue.js 中结合 Element UI 等 UI 库的典型表单验证写法,具体含义如下:代码拆解 this.$refs.fromData.validate((valid) > {// 验证后的回调逻辑 })this.$refs.fromData $refs 是 Vue 提供的特殊属性,用于访问模板中通过 ref&qu…

多方案对比分析:后端数据加密策略及实践

多方案对比分析:后端数据加密策略及实践 随着互联网业务对用户隐私和数据安全的要求不断提升,后端系统中对敏感数据的加密保护已成为必备需求。从对称加密、非对称加密到数据库透明加密、应用层字段加密,各种方案各有特点。本文将以方案对比分…

《Java语言程序设计》1.4 复习题

1.4.1 什么是操作系统?列出一些流行的操作系统?操作系统(Operating System)是运行在计算机上的最重要的程序。操作系统管理和控制计算机的活动。通用计算机的流行操作系统有Microsoft Windows、Mac OS以及Linux。如果没有在计算机上安装和运行操作系统,像Web浏览器…

OpenCV图像自动缩放(Autoscaling)函数autoscaling()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于对输入图像进行自动缩放(Autoscaling),即根据输入图像的像素值范围将其线性映射到一个新的范围内&am…

多线程的认识

竞争与协作在单核 CPU 系统里,为了实现多个程序同时运行的假象,操作系统通常以时间片调度的方式,让每个进程执行每次执行一个时间片,时间片用完了,就切换下一个进程运行,由于这个时间片的时间很短&#xff…

SpringCloud相关总结

SpringCloud相关总结 1. 权威文档推荐: 官方文档:https://spring.io/cloud 玩的时候,注意SpringBoot与SpringCloud的版本兼容问题,推荐参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%…