与 gRPC 混淆

Confusion with gRPC

平台:Windows 10 台电脑; Java: 1.8.0_201; gRPC: 1.21.x

我最近研究了 Google RPC (gRPC) 包,试图评估它与 Java 一起使用。我已通读网站 (grpc.io) 上的大量可用信息,并已尝试 download/build/install 对其进行测试评估。 我运气不太好。

有点不清楚(无论如何对我来说)使用 gRPC 究竟需要什么。似乎有许多活动部件,很难说出所需的一切。我知道它使用 Google Protobuf,所以我按照说明安装了 Protobuf 编译器 protoc。我不确定除了编译器之外我是否还需要 Protobuf 的其他东西。我假设有一个 "core" 到 gRPC,然后是一个特定于语言的模块(例如 Java),它实现了与 Java 程序接口的必要逻辑。不知道还有没有其他的依赖。

由于我工作的安全政策,我无法克隆 git 存储库,但我下载了发行版(来自 https://github.com/grpc/grpc-java 的 v1.21.x)并将其解压到一个目录。我按照说明构建示例客户端和服务器。该过程因缺少文件而失败。以下是失败的摘录。

> Task :grpc-compiler:compileJava_pluginExecutableJava_pluginCpp
java_generator.h
C:\Users\jo24447\workspace\gRPC\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_plugin.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_generator.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

我加入了 gRPC 邮件列表并提交了一些描述我遇到的问题的问题。简短的回复表明我应该拉下最新版本(我有)——我最初拉下了 master 分支,显然这是错误的做法。这暗示它带有一个预构建的代码生成器插件 (codegen)。我没有得到构建失败的原因。

link 还提供了构建代码生成插件的说明。站点文档似乎表明我不需要构建代码生成器,除非我实际上正在更改代码,而我不是。不管我看了说明书。看起来这是为了在 *nix 平台上完成。在 Windows 平台上做这件事的人应该做什么?

无论如何,我尝试使用新发行版进行构建,但由于同样的问题而失败。我回复了,但什么也没听到。

此时我卡住了,不知道下一步该做什么。

关于以下内容的任何想法都会非常有帮助和赞赏:

我已经部分回应了我假设的 mailing list thread you referenced

grpc-java 是它自己的完整实现。它不是基于 https://github.com/grpc/grpc 处的 "C core"。

总之,你已经走出了人迹罕至的道路;您不需要自己编译 grpc-java。我们已经在 Maven Central 上提供了二进制文件。

当您下载 grpc-java 时,您应该已经下载了 v1.12.0,它是发布标签,而不是 v1.12.x。已发布的版本很容易在 release section.

下载

git clone 不可用时,我们没有明确的说明,因为这种情况很少见,而且答案会因环境而异。

如果您想更改 gRPC-Java 或自己构建它,请参阅 the instructions。 但是您不需要这样做就可以使用它。


要在Maven/Gradle项目中使用,只需添加必要的依赖:

行家

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty-shaded</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.20.0</version>
</dependency>

Gradle

compile 'io.grpc:grpc-netty-shaded:1.20.0'
compile 'io.grpc:grpc-protobuf:1.20.0'
compile 'io.grpc:grpc-stub:1.20.0'

对于 protobuf-based codegen,您可以使用与构建系统集成的插件:

protobuf-maven-plugin

<build>
  <extensions>
    <extension>
      <groupId>kr.motd.maven</groupId>
      <artifactId>os-maven-plugin</artifactId>
      <version>1.5.0.Final</version>
    </extension>
  </extensions>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.5.1</version>
      <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.20.0:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

protobuf-gradle-plugin

apply plugin: 'com.google.protobuf'

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
  }
}

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.7.1"
  }
  plugins {
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.20.0'
    }
  }
  generateProtoTasks {
    all()*.plugins {
      grpc {}
    }
  }
}

您可以在 the README 中找到更多详细信息。