【免费下载链接】skrstop-components基于springboot的常用功能封装包括通用响应、通用异常、数据库、redis、远程存储、常用自定义注解、多数据源等省去各种配置和通用配置开箱即用支持jdk8、jdk17项目地址https://gitcode.com/gh_mirrors/sk/skrstop-components点击查看免费下载做微服务的同学都知道服务之间默认的 JSON HTTP/1.1 调用又慢又占带宽。skrstop-components 是【基于 Spring Boot 的常用功能封装组件】其中的components-starter-feign-protostuff模块直接提供了 Feign HTTP/2 Protostuff 二进制序列化 Gzip 压缩的一站式高性能 RPC 方案引入一个 starter、改一个注解、开两个配置项就能让微服务间调用体积和耗时显著下降支持 JDK8 与 JDK17开箱即用。为什么默认的 Feign 调用不够快 先弄清楚性能瓶颈在哪才知道这个 starter 帮你解决了什么环节默认方式高性能方式本教程序列化JSON文本字段名重复传输Protostuff基于 Protobuf 的二进制格式传输压缩通常不压缩Gzip / Snappy / Lz4 可开关传输协议HTTP/1.1每连接一路请求HTTP/2多路复用、头部压缩客户端连接默认URLConnectionOkHttp 连接池默认200连接复用响应解析手动解包 Result 包装自动解包直接拿到 dataProtostuff 是 Google Protobuf 的 Java 增强实现不需要写 .proto 文件、不需要注解普通 POJO 直接就能二进制序列化。序列化后的报文比 JSON 小得多CPU 编解码也更快这就是RPC 性能翻倍的核心来源。项目结构与核心模块定位先看一眼整体布局见 README.md本教程聚焦这三个目录核心能力components-starter-feign-protostuff —— HTTP/2 自动配置、Protostuff 转换器、Feign 拦截器官方示例components-example-starters-cloud-feign —— 可直接运行的 Feign 客户端/服务端样例响应模型components-core-common ——Result、ListResult、PageListResult等统一响应一键接入三步完成配置第1步添加依赖在业务服务的 pom 中加入 starter依赖清单 已包含 spring-cloud-openfeign、feign-okhttp、protostuff 全家桶无需再手动引入dependency groupIdcom.skrstop.framework/groupId artifactIdcomponents-starter-feign-protostuff/artifactId version${skrstop.version}/version /dependency如果本地跑示例工程可克隆仓库后查看 application.yml 的完整参考配置git clone https://gitcode.com/gh_mirrors/sk/skrstop-components第2步开启 HTTP/2 与 OkHttp配置项汇总前缀skrstop.feign.config定义见 GlobalFeignProperties.java配置项默认值作用skrstop.feign.config.enable-http2false服务端客户端同时启用 HTTP/2skrstop.feign.config.gzip-compresstrue序列化后追加 Gzip 压缩skrstop.feign.config.scan-package无自动扫描 Feign 客户端包路径skrstop.feign.config.transfer-headertrue透传上游请求头如登录态skrstop.feign.config.stop-auto-remove-global-responsefalse关闭自动解包 Result功能一份典型配置skrstop: feign: config: enable-http2: true # 开启 HTTP/2 gzip-compress: true # 开启 Gzip 压缩 scan-package: com.your.api # 你的 Feign 接口包 spring: cloud: openfeign: ok-http: enabled: true # Feign 客户端走 OkHttp 连接池 server: http2: enabled: true # 服务端Tomcat启用 h2c 升级第3步把FeignClient换成ProtostuffFeignClient这是全篇唯一要改的代码。新注解是FeignClient的超集ProtostuffFeignClient.java 中所有属性一一别名映射额外提供三个微服务能力ProtostuffFeignClient(name order-service, path /order, local true) public interface OrderFeign { GetMapping(/{id}) OrderVo getOrder(PathVariable(id) Long id); }local true跳过网络直接本地调用适合服务合并场景要求 Controller 实现该 Feign 接口autoLocal true扫包自动判断是否可本地化注意会拖慢启动速度其余属性contextId、fallbackFactory、configuration等与原生 Feign 完全一致平滑迁移零成本它到底帮你做了什么原理速览 下面按请求链路拆解 starter 的自动装配逻辑方便排障① 协议标记拦截器—— FeignMarkAndHeaderInterceptor.java 在每个出站请求上自动打上use_feign: true、feign_protocol: protostuff标记和application/x-protobuf的 Content-Type服务端据此识别这是内部 Protostuff 调用同时按transfer-header配置透传请求头默认忽略 host、content-length 等7个头部常量见 FeignConst.java。② 二进制转换器—— ProtostuffHttpMessageConverter.java 替换默认 JSON 转换器调用ProtostuffUtil.serializeWithCompress完成序列化Gzip一步到位并支持自适应解包你声明返回ListString它内部自动按ListResult反序列化后只给你 data 部分声明PageData则自动转SimplePageData——接口方法直接写业务类型不用背ResultT外壳。③ HTTP/2 双引擎支持—— 服务端按容器自动生效TomcatHttp2TomcatAutoConfiguration.java 注册Http2Protocol做 h2c明文 HTTP/2升级UndertowHttp2UndertowAutoConfiguration.java 设置ENABLE_HTTP2选项客户端OkHttpAutoConfiguration.java 在开启 HTTP/2 时给 OkHttp 加H2_PRIOR_KNOWLEDGE协议并创建 200 连接、TTL 900 秒的连接池可调参见 FeignOkHttpProperties.java HTTP/2 多路复用让一条 TCP 连接并发跑多个请求消除 HTTP/1.1 的队头阻塞对一个订单页要调库存价格用户三个服务这类扇出场景提升明显。跟着官方示例跑一遍完整可运行示例位于 components-example-starters-cloud-feign客户端声明RemoteFeign.java —— 演示Result、ListResult、PageCollectionResult各类型 FallbackFactory熔断降级本地化调用RemoteFeignController.java ——local true时接口方法直接声明Integer、ListDemoInfo、void完全看不到响应包装类服务提供方与实体RemoteServerController.java、DemoInfo.java启动类ExampleStartersCloudFeignApplicationBootstrap.java配好scan-package后连EnableFeignClients都可以省示例中的 application.yml 还展示了 OkHttp 请求日志开关log-info-level-for-request调试期建议打开能直观看到每个请求的协议与耗时。常见问题与调优清单⚠️避坑指南按出现频率排序客户端返回类型转换报错服务端关闭了 feign 包装skrstop.response.config.support-feign false时客户端必须设置stop-auto-remove-global-response: true否则解包逻辑对不上会抛类型错误忘记换注解普通FeignClient不会打feign_protocol: protostuff标记服务端仍按 JSON 处理性能收益直接归零HTTP/2 没生效Tomcat 需同时配置server.http2.enabled: trueOkHttp 走 h2c 需skrstop.feign.config.enable-http2: true且ok-http.enabled: true压缩开销权衡小报文几百字节Gzip 压缩收益有限可用gzip-compress: false关掉Protostuff 本身已是二进制小体积连接池调优高并发扇出场景可上调spring.cloud.openfeign.ok-http.max-connections默认 200、time-to-live默认 900s性能对比参考典型 1KB JSON 订单对象相对值Protostuff 报文约缩小 60%~80% 体积叠加 Gzip 后网络字节数再降一档HTTP/2 连接池使高频小请求的 P99 延迟明显下降。翻倍来自序列化、压缩、协议三项叠加建议用项目自带的压测工具 components-util-stress 在自己的环境里实测。总结skrstop-components 的 feign-protostuff starter 把JSON 换 Protostuff、HTTP/1.1 升 HTTP/2、裸请求加压缩、响应自动解包这四件最耗时的事全部收敛成一个依赖 一个注解 几行配置。它的模块路径 components-starters/components-starter-feign-protostuff 与示例 components-examples/components-example-starters-cloud-feign 都值得精读配合仓库中 README.md 的模块总览你可以把数据库、Redis、对象存储等其他 starter 也一并纳入技术栈。升级前先对照 CHANGELOG.md 确认版本即可安全地将你的微服务 RPC 链路提速。赞分享【免费下载链接】skrstop-components基于springboot的常用功能封装包括通用响应、通用异常、数据库、redis、远程存储、常用自定义注解、多数据源等省去各种配置和通用配置开箱即用支持jdk8、jdk17项目地址https://gitcode.com/gh_mirrors/sk/skrstop-components点击查看免费下载相关推荐终极指南Guide-RPC-Framework序列化框架对比测试 - Kryo、Protostuff、Hessian性能大揭秘终极指南Guide RPC Framework序列化框架对比测试 Kryo、Protostuff、Hessian性能大揭秘 Guide RPC Framewo高性能Java序列化新范式Protostuff全解析高性能Java序列化新范式Protostuff全解析 你还在为Java序列化性能发愁 当系统吞吐量突破1000 TPS传统Java序列化Serializ5步构建开源机器人手臂从3D打印到智能感知的完整指南5步构建开源机器人手臂从3D打印到智能感知的完整指南 开源机器人手臂技术正在重塑机器人开发的门槛SO 100/SO 101系列作为标准开放平台为开发者和研硬件开发机器人智能硬件嵌入式上一篇AgentField Agent Mesh深度解析分布式AI Agent的服务发现与跨Agent调用原理下一篇TIL 仓库笔记ack 命令行工具的隐藏彩蛋 --bar 选项创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考