Spring BootでgRPC使ってみる

Spring BootプロジェクトでgRPCを使用してみます。

gRPC公式が提供しているライブラリを使用し、使用方法に従って使っていきます。

SpringでgRPCを使用できるStartarキットがSpring公式でもgRPC公式でもない方から提供されているようですが、今回はそちらは使用しません。

ダウンロード

gRPC公式GitHubのgRPC-Javaを参考に必要なライブラリをダウンロードします。

pom.xmlのdependencyに次を追加します。

pom.xml – dependency
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty-shaded</artifactId>
  <version>1.29.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.29.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.29.0</version>
</dependency>
<dependency> <!-- necessary for Java 9+ -->
  <groupId>org.apache.tomcat</groupId>
  <artifactId>annotations-api</artifactId>
  <version>6.0.53</version>
  <scope>provided</scope>
</dependency>

pom.xmlのbuildに次を追加します。これはprotoファイルからコードを自動生成するためのものです。protoファイルは、src/main/proto と src/test/proto に配置することが想定されているます。

pom.xml – build
<build>
  <extensions>
    <extension>
      <groupId>kr.motd.maven</groupId>
      <artifactId>os-maven-plugin</artifactId>
      <version>1.6.2</version>
    </extension>
  </extensions>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.6.1</version>
      <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.11.0:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.29.0:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

eclipseユーザーはOS関連の次の記述も必要とのことです。

pom.xml – plugin
<plugin>
  <groupId>kr.motd.maven</groupId>
  <artifactId>os-maven-plugin</artifactId>
  <version>1.6.1</version>
  <executions>
    <execution>
      <phase>initialize</phase>
      <goals>
        <goal>detect</goal>
      </goals>
    </execution>
  </executions>
</plugin>

これでダウンロードは完了です。

protoファイル

公式サイトで紹介されている helloworld.proto をコピペします。配置する場所はsrc/main/proto と src/test/protoです。

ここでMaven Installを実行します。すると次のようにソースコードが自動生成されます。

ソースコード

Java Quick Startをもとにサンプルを作成していきます。

grpc/grpc-java/HelloWorldClient.java – GitHub

grpc/grpc-java/HelloWorldServer.java – GitHub