-1

我从 gRPC 开始构建一个简单的 Java 聊天程序。

protc --version 打印 libprotoc 3.5.1

-proto 文件:

syntax = "proto3";
option java_multiple_files = true;
option java_package = "grpc";
// whihout this Option i get no service
option java_generic_services = true;
option java_outer_classname = "ChatProto";
option objc_class_prefix = "HLW";
package chat;
message ClientPost {
  string name = 1;
  string value = 2;
}
message ServerReply {
  ClientPost back = 1;
}
// The  service definition.
service  Verbindung {
  rpc ChatService (stream ClientPost) returns (stream ServerReply);
}

//文件结束

  1. 为什么我需要设置选项 java_generic_services ?

    class ChatImpl extends grpc.Verbindung { @Override public void chatService(RpcController controller, ClientPost request, RpcCallback done) { // 为什么我得到这种服务?} }

// 2. 为什么我得到另一个类名?关闭 VerbindungImplBase

预期功能

public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { }
  1. 我必须做什么才能获得这种预期的服务功能?

可能是错误的协议编译器/错误的安装/缺少零件?

4

2 回答 2

0

您可能没有运行 gRPC 代码生成器。如果没有完整配置您如何运行 protoc,我无法指出太多细节,但您可能只通过 java_generic_services=true 生成 protobuf 消息。

你不应该需要 java_generic_services=true。相反,您应该像现在一样生成消息,然后还要使用 grpc-java 插件。有手动运行 protoc的文档,我们的主要文档记录了使用 Maven 或 Gradle 插件的首选方法。

于 2018-05-23T19:58:44.480 回答
0

我有一个开放的 suse jump 42.2 系统,这个版本对 grpc 一无所知 - 这边不支持

我得到了编译的协议 - 它没有所需的 Java-gen 插件

找到https://github.com/grpc/grpc-java/blob/master/compiler/README.md

“通常你不需要自己编译 codegen,因为 Maven Central 上提供了用于常见平台的预编译二进制文件。”

我发现只有一些 exe 文件。- 没用

“切换到编译器目录:”

我没有编译器目录。- 仍然试图找出我能得到

NetBeans 只有一个用于 protofiles 的编辑器插件 - 所以我的 IDE 无法处理 gRPC

也许对于其他 IDE,gRPC 的 Maven 插件会有所帮助

我期望一个完整的协议编译器和所有需要的插件:-) 不是安装工具冒险。

一个对我来说的时刻:gRPC - 好主意,但我得到了一个“安装 gRPC”冒险

于 2018-05-25T06:06:23.947 回答