当前位置: 首页 > news >正文

Day 23:Java与Agent集成 - gRPC调用Java服务

Day 23:Java与Agent集成 - gRPC调用Java服务

🤖系列:Java工程师转AI Agent 3个月学习计划
👤作者:宸丶一| 28岁Java程序员
🎯今日目标:Java服务封装成gRPC,Python Agent调用Java服务
💬个人格言:代码改不改变世界我不知道,但先让我准时下班。


前言

说实话,之前一直没搞懂gRPC和REST到底有啥区别。这次自己写了个计算器服务,跑起来之后才明白:gRPC真的快太多了。

最近一直体验小米的MiMo Code,用AI编程助手写代码,感觉就像有个助手在旁边帮你干活,还挺爽的。


学习目标

  1. 理解Java服务封装成gRPC
  2. 掌握gRPC客户端调用Java服务
  3. 理解gRPC在Agent架构中的价值

一、gRPC核心概念

Proto文件 = Interface + DTO

// Proto文件(像Java的Interface + DTO) service CalculatorService { rpc Add (AddRequest) returns (AddResponse); } message AddRequest { double left = 1; double right = 2; } message AddResponse { double result = 1; string message = 2; }

类比Java

// Java Interface + DTOpublicinterfaceCalculatorService{AddResponseadd(AddRequestrequest);}

gRPC架构

Java Service

Python Agent

Protobuf/HTTP2

Protobuf/HTTP2

gRPC Client

Stub

Stub

gRPC Server

核心组件

  • Proto文件:定义接口和数据格式(Interface + DTO)
  • gRPC Server:提供服务实现(Spring Boot服务)
  • gRPC Client:调用服务(RestTemplate/OpenFeign)
  • Stub:自动生成的代理对象
  • Protobuf:二进制序列化,更快更小
  • HTTP/2:多路复用,更高效
public class AddRequest { private double left; private double right; } public class AddResponse { private double result; private String message; }

二、gRPC vs REST

对比表格

对比项RESTgRPC
数据格式JSON(文本)Protobuf(二进制)
传输协议HTTP/1.1HTTP/2
性能50-100ms/次0.4-2ms/次
类型安全强(Proto严格定义)
代码生成手动写HTTP调用自动生成客户端/服务端
跨语言一般原生支持(任意语言互调)

gRPC vs REST 对比

gRPC

REST

慢100倍

HTTP/1.1

JSON文本

手动序列化/反序列化

短连接

性能: 50-100ms/次

HTTP/2

Protobuf二进制

自动序列化/反序列化

长连接+多路复用

性能: 0.4-2ms/次

核心差异

  • 数据格式:JSON(文本) vs Protobuf(二进制)
  • 传输协议:HTTP/1.1 vs HTTP/2
  • 性能:50-100ms vs 0.4-2ms
  • 类型安全:弱 vs 强

性能实测

REST API (JSON): 50-100ms/次 gRPC (Protobuf): 0.4-2ms/次 gRPC比REST快 100-200 倍(本地)/ 3-10 倍(网络)

三、实战

gRPC调用时序

gRPC ServerStubChannelgRPC ClientgRPC ServerStubChannelgRPC Client全程耗时: 0.4-2ms创建连接 localhost:50051创建代理对象stub.Add(request)发送请求 (Protobuf)HTTP/2 请求执行计算返回响应 (Protobuf)接收响应返回结果

1. gRPC服务端

classCalculatorServiceServicer(calculator_pb2_grpc.CalculatorServiceServicer):defAdd(self,request,context):result=request.left+request.rightreturncalculator_pb2.AddResponse(result=result,message=f'{request.left}+{request.right}={result}')

2. gRPC客户端

channel=grpc.insecure_channel('localhost:50051')stub=calculator_pb2_grpc.CalculatorServiceStub(channel)request=calculator_pb2.AddRequest(left=10,right=5)response=stub.Add(request)print(f'✅{response.message}')

3. 运行结果

=== gRPC客户端调用Java服务 === 1. 加法:10 + 5 = ✅ 10.0 + 5.0 = 15.0 2. 减法:10 - 5 = ✅ 10.0 - 5.0 = 5.0 3. 乘法:10 × 5 = ✅ 10.0 × 5.0 = 50.0 4. 除法:10 ÷ 5 = ✅ 10.0 ÷ 5.0 = 2.0 5. 除法(除数为0):10 ÷ 0 = ❌ 除法错误:除数不能为0 🎉 所有调用完成!

四、今日收获

知识层面

  • 理解了gRPC的核心概念
  • 掌握了gRPC客户端调用
  • 理解了gRPC在Agent架构中的价值

技能层面

  • 能定义Proto文件
  • 能实现gRPC服务端和客户端
  • 能理解gRPC和REST的区别

思维层面

  • 学会了用Java类比理解gRPC
  • 理解了"Proto文件 = Interface + DTO"
  • 理解了"Stub = Proxy对象"

五、思考题答案

1. gRPC和REST的核心区别?

答案

  • gRPC用二进制Protobuf,REST用文本JSON
  • gRPC用HTTP/2,REST用HTTP/1.1
  • gRPC类型安全,REST弱类型

2. 为什么gRPC比REST快?

答案

  • Protobuf二进制更小(小3-5倍)
  • HTTP/2多路复用(不用排队)
  • 类型安全(不需要反序列化JSON)

3. Proto文件的作用?

答案

  • Proto文件 = Interface + DTO
  • 自动生成客户端和服务端代码
  • 跨语言支持(任意语言互调)

4. 什么场景用gRPC,什么场景用REST?

答案

  • gRPC:内部服务调用、高性能场景、跨语言
  • REST:对外API、前端调用、简单场景

5. Agent调用Java服务为什么推荐gRPC?

答案

  • Python Agent调Java服务
  • gRPC更快(0.42ms vs 50ms)
  • gRPC类型安全(不会传错参数)
  • gRPC跨语言(Python调Java)

六、明日计划

明天继续深入分析Provider目录的具体实现!


📝小小腾老师的评分

维度得分评价
gRPC掌握程度⭐⭐⭐⭐能独立实现,但HTTP/2原理还需要深入
代码实践⭐⭐⭐⭐⭐代码清晰,注释详细
思考题⭐⭐⭐⭐⭐答案准确,理解到位

总分:92.5分(优秀)
老师说:今天表现很棒!理解了gRPC的核心概念,掌握了gRPC客户端调用,理解了gRPC在Agent架构中的价值。继续保持!

http://www.jsqmd.com/news/1093516/

相关文章:

  • Windows应急响应靶机实战:从Web入侵到系统取证的完整调查指南
  • 新商业机器人品牌推荐 2026|轻量级协作机器人选型与场景匹配
  • Android中App电量优化
  • 防止 iOS 应用被二次打包 代码混淆 和 签名校验的防篡改方案
  • 从TI评估板看高速硬件设计:BOM选型与PCB布局的工程实践
  • CTF实战:巧用文件结构修复图片宽高
  • 月之暗面Kimi:一年估值飙升,激进技术与克制扩张并行,欲成“不被定义”大模型
  • wecomapi开发客户备注同步:如何处理员工备注与系统字段
  • 计算机Java毕设实战-基于 SpringBoot 的毕业文档提交审核管理系统高校毕业设计项目进程管控系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Ryujinx:在PC上免费体验Nintendo Switch游戏的全能模拟器
  • 元器件为什么会失效?
  • 一颗芯片撬动48款爆款产品:杰理2026最新矩阵与尚凌科技供应链布局揭秘
  • 开源 CI 模板上线:结合信号提取与 LLM 推理,检测 CI/CD 流水线滥用行为
  • 企业微信API开发会话数据进入业务系统时,需要注意哪些边界
  • 《电工学》核心解题思路精讲:从电路定理到暂态分析
  • 《我那从“人工智障”一路打怪升级成“神”的室友》
  • Java的java.lang.StackWalker检查操作
  • A股量化策略日报(2026年06月29日)
  • 陆面生态水文模拟与多源遥感数据同化的实践技术应用
  • 2026 实测干货|5 款免费商用 AI 电商绘图软件,一键生成主图 / 详情页 / 活动海报
  • 【毕业设计】基于 SpringBoot 的毕业设计流程跟踪管理系统 毕业生项目进度与文档归档管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • 门窗十大品牌盘点:门窗十大品牌实力解析(2026最新)
  • 工控备件行业为什么都在用参数化管理ERP
  • LoadRunner 11.0 在 Windows 11 上的完整部署与本地化实战
  • 深入解析TI ADS4449评估模块:高速ADC性能验证与硬件设计实战
  • Redis 集群 Slot 分配策略
  • CW32L012的智能语音灯控实现案例分享
  • 腾讯云大数据携手工商银行——存算分离架构落地实践,共绘数智金融新蓝图
  • 2026年最新|大模型备案资料规范指南
  • 从单线程到多线程 IO,Redis 7.2 到底快了多少?