概念

RPC框架:负责组装协议数据,调用传输层发送【框架】

例如Dubbo框架 openFeign框架 gRPC框架 Thrift框架

RPC协议:规定了数据的组织方式和和含义【网络层】

Dubbo 协议 HTTP协议 gRPC 协议 Thrift 二进制协议

传输:规定了数据如何在网络上移动【传输中间层】

Netty传输

底层:TCP【传输层】

TCP有粘包问题,因为它是基于字节流的,所以上层协议要定义一个消息头来定义包的大小

各种RPC框架

image-20260515144119089

Netty

一、开局:从最原始的 BIO 说起

什么是 BO (Blocking I/O)?

  • 模型ServerSocket.accept()阻塞等待连接,InputStream.read()阻塞等待数据。

  • 问题一个连接一个线程。如果有1000个客户端,就得开1000个线程。线程是昂贵的资源(内存约1MB/线程,上下文切换开销大)。并发量一大,系统直接崩了

二、进阶:NIO 的出现(解决问题,但带来复杂度)

什么是 NIO (Non-blocking I/O)?

Channel 是通道,Buffer 是载体,Selector 是多路复用器。Channel 注册到 Selector,Selector 轮询就绪的 Channel,通过 Buffer 读写

三、Netty

放弃

IO复用

select

poll

epoll

openFeign使用

HTTP只是广义上的远程调用协议,openFeign也只是广义上的远程调用框架

基本使用

依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

开启Feign:

image-20260515162137101

定义Feign客户端

image-20260515162440094

业务层调用:

image-20260515162508243

超时配置

image-20260515162702724

日志级别

image-20260515162823794

请求拦截器

image-20260515162908611

异常处理

image-20260515162945329

负载均衡

只要服务注册到 Eureka / Nacos:自动负载均衡