什么是rpc调用,让我们调用远程方法就像调用本地方法一样 这就属于rpc调用
rpc是针对于本地来说的
调用远程方法根调用本地方法一样 如果能达到这种效果 就是rpc调用
如果达到一种效果 调用远程和调用本地一样 他就是一种rpc框架
2 个微服务 之间发的调用 我们之前通过ribbon的方式发起调用
需要构建一个url 然后再利用我们加了@Lb的restTemplalte做的负载均衡策略
如果我可以根据本地方法一样 order.findById( ) 一样的话就很方便 的完成一次调用
我可以基于jdk的动态代理拿一个代理对象 然后我可以调用一个方法
第二就是通过协议层进行 加密 解密 (对请求进行编码 或者序列化 )
第三就是 一定有远端通信(传输层面) nio/bio、netty、grpc
发数据 接受数据(解码) 反射执行 真正的服务
代理层
协议层
传输层
微服务之间完成feign,springcloud 提供了一个rpc框架 feign
不用像ribbon一样构建一个url 然后restTemplate 发起一个请求
ribbon和feign的对比
ribbon 是构建一个url 然后基于restTemplate发起的调用(@Lb提供负载均衡的能力)
feign 需要做个标记 记录这是一个Feign调用
代理层 动态代理层
协议层 加密 解密 编码 解码
网络通信层 发起http请求
feign就是一种rpc架构,在springcloud中是怎么应用的
feign的使用,Feign 底层也实现了负载均衡
rpc 框架的负载均衡怎么实现的
feign底层整合了ribbon
feign的扩展
1 . 比如说用户下单,扣减库存的时候可能会涉及到分布式事务,分布式事务可能就会有一个全局的事务id(pid),有时候要做授权
https://blog.csdn.net/qq_41885819/article/details/121955452
怎么在feign的请求头中添加东西
还有rpc框架数据在网络中传输,数据越小效率越高,这时候我们要对数据进行压缩
在feign中也可以配置对数据进行压缩,这些都是我们要考虑的
springcloud中的feign的扩展点
1 .feign的日志组件 logger 帮助我们记录日志请求日志
并且它可以定义我们的日志级别
可以将请求日志打印出来 发一个请求会打印很多请求日志、
配置日志级别------FULL ( 全部级别)
默认没有任何日志 不利于我们生产排查问题
生产配置BASIC 帮助我们在生产环境追踪问题
默认是没有任何日志输出的,不利于我们排查问题.性能最好的 因为不用打印日志
basic 我们也可以基于yaml配置 他上面会显示执行时间,可以帮助我们追踪生产问题
执行时间 这是通过我们yaml的方式来执行的
当然也可以全局配置
个性化需求,可以在yaml 中配置
feign支持日志.因为定位问题的话没有日志的话 是很麻烦的
第二个就是我要通过feign 往下游传递我的token 信息 feign 帮我们实现了默认的拦截器
在请求发起的位置传递一个token,我想要给下游微服务传参的时候就可以使用这个拦截器
我们的feingn 底层依赖于ribbon,就可以配置一些超时时间
一个是连接的超时时间 一个是处理请求的超时时间
一个是连接的
一个是处理请求的
我们超时之后 在微服务中是要做处理的 比如说降级或者熔断机制
不能说一直超时
或者说让我们的请求尽可能的快
数据压缩
对feign 的性能提升的一种配置
开启压缩 节约网络资源
压缩那些类型数据 比如说xml json
最小压缩值是多少
这样可以提高传输速率