与gRPC混淆

时间:2019-05-21 17:05:34

标签: java grpc grpc-java

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

我最近研究了Google RPC(gRPC)软件包,尝试对其进行评估以用于Java。我已阅读了该站点(grpc.io)上的许多可用信息,并试图下载/构建/安装它以进行测试评估。 我运气不好。

(无论如何,对我而言)尚不清楚要使用gRPC到底需要什么。似乎有许多活动的部分,很难说出所需的一切。我知道它使用Google Protobuf,因此我按照说明安装了Protobuf编译器protoc。我不确定除编译器外是否还需要其他Protobuf。我假设gRPC有一个“核心”,然后是实现特定语言与Java程序接口的特定语言模块(例如,对于Java)。我不知道是否还有其他依赖项。

由于我使用的安全策略,我无法克隆git repo,但是我下载了发行版(来自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)。没有给出构建失败的原因。

还提供了指向构建代码生成插件的说明的链接。该站点文档似乎表明,除非我实际上在更改代码,否则不需要构建代码源,而实际上不是。无论如何,我都仔细阅读了说明。看来打算在* nix平台上完成此操作。在Windows平台上执行此操作的人应该做什么?

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

这时我陷入困境,不知道下一步该怎么做。

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

  • 允许成功构建和发布的最低要求发行版 后续使用
  • 明确的步骤说明 从下载的发行版到功能齐全的应用程序/实用程序

2 个答案:

答案 0 :(得分:1)

我在某种程度上以mailing list thread you referenced作为回应。

grpc-java是它自己的完整实现。它不是基于https://github.com/grpc/grpc上的“ C内核”。

简而言之,您已经走了一条破败的道路;您不需要自己编译grpc-java。我们已经在Maven Central上提供了二进制文件。

下载grpc-java时,应该已经下载了v1.12.0,它是发行版标签,而不是v1.12.x。已发布的版本可以轻松地从release section下载。

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

答案 1 :(得分:1)

如果您想对gRPC-Java进行更改或自己构建,请参见the instructions。 但是您无需执行此操作即可使用它。


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

行家

n=1000000
ID=rand(10, n)
x=rand(1.0, n)
t=table(ID, x)
db=database("C:/DolphinDB/Data/rangedb", RANGE,  0 5 10)

pt = db.createPartitionedTable(t, `pt, `ID)
pt.append!(t)

pt=loadTable(db,`pt)
select count(x) from pt;

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>

对于基于protobuf的代码源,您可以使用与构建系统集成的插件:

protobuf-maven-plugin

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-gradle-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>

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