我有一个使用 maven protoc 插件 0.4.2 和 grpc 版本 0.8.0 编译的 grpc 服务代码。我正在尝试将此生成的代码与 datafflow sdk 1.4.0 一起使用,但是当我尝试使用阻塞存根创建 grpc 客户端时出现此错误。
com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/MessageLite;)Lio/grpc/MethodDescriptor$Marshaller;
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:186)
我不确定这是否是因为数据流 sdk 使用的 protobuf 版本与 grpc 生成的代码之间存在一些差异。当我尝试从管道中的一个 DoFn 输出 protobuf 消息时,我也会收到此错误
com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.NoSuchMethodError: com.google.protobuf.GeneratedMessage.computeStringSize(ILjava/lang/Object;)I
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:186)
我已经从 maven 中的数据流 sdk 依赖项中排除了 protobuf,并且在我的依赖项树中显示的唯一 protobuf 和 groc 包分别是 3.0.0-alpha-3.1 和 0.8.0。