C++客户端调用Java gRPC服务端触发方法未找到未认证异常
问题结论
该问题是lognet grpc-spring-boot-starter 4.5.10及更早版本的原生BUG,不属于配置缺失、依赖遗漏问题。
根因说明
- gRPC官方Java代码生成器遵循标准命名规范,会自动将proto文件中定义的蛇形命名(snake-case)RPC方法,转换为驼峰命名(camel-case)的Java方法
- 4.5.10及更早版本的
org.lognet.springboot.grpc.GRpcServicesRegistry#descriptorToServiceMethod逻辑存在缺陷,直接使用proto定义中的原始蛇形方法名查找Java类中的方法,未做命名格式转换,因此匹配失败抛出异常。
修复方案
- 优先选择升级
grpc-spring-boot-starter版本到4.6.0及以上,官方已在后续版本中修复该命名转换逻辑,会自动将蛇形方法名转换为驼峰后再做匹配 - 若暂时无法升级组件版本,可采用临时兼容方案:修改proto文件中的RPC方法名直接使用驼峰命名,避免转换匹配失败(该方案不符合Protobuf官方命名规范,仅建议临时使用)
- 若必须保留当前组件版本,也可以自定义重写
GRpcServicesRegistry的descriptorToServiceMethod方法,手动增加蛇形命名转驼峰命名的逻辑,即可解决匹配问题。
内容的提问来源于stack exchange,提问作者Tobiq
相关产品推荐
相关产品推荐

