首先,完整的报错是java.lang.AbstractMethodError: io.grpc.netty.shaded.io.grpc.netty.NettyClientStream$Sink.request(I)V。
这是博主在做一次微服务迁移碰到的问题,原先的配置在Spring Boot下跑是完全正常的,然后把grpc的配置迁移到Spring Cloud下就开始报该错误了。
两个项目对于GRPC唯一不同的地方就是引入的Boot版本不一致,单体引入的是2.2.5.RELEASE,微服务引入的是2.3.5.RELEASE,引入的GRPC版本都是1.32.1。一开始我以为找到问题了,从版本依赖关系进行入手,查阅到grpc-spring-boot-starter(感谢作者大大)有这方面的介绍,
具体链接如下:https://github.com/yidongnan/grpc-spring-boot-starter/blob/master/docs/en/versions.md,提升了grpc的版本到1.32.1以上,然后还是一直报错,这就让我很苦恼了。
没办法,操作下Rollback,还是仔细debug看下到底是哪块代码出错了,最后发现的问题是Sink接口中的request方法竟然没有被实现而导致的报错,如下图所示:
这完全不该啊,我在Spring Boot版本那边引入的也是相同的grpc版本啊,于是切回到boot版本找到AbstractClientStream中内部类Sink中的request方法是否有被实现。然而惊呆了我,如下图,你是不是也很吃惊,压根就没有这个request方法啊。