web-dev-qa-db-ja.com

Spring BootとgRPCおよびProtobufを併用する

GRPCとSpring Bootを併用した例や考えはありますか?

29
Markus

まだ関連がある場合は、gRPC spring-boot-starter here を作成しました。

grpc-spring-boot-starterは、@ GRpcService-enabledBean。

最も簡単な例:

@GRpcService(grpcServiceOuterClass = GreeterGrpc.class)
public static class GreeterService implements GreeterGrpc.Greeter {

    @Override 
    public void sayHello(GreeterOuterClass.HelloRequest request, StreamObserver<GreeterOuterClass.HelloReply> responseObserver) {
      // omitted 
    }

}

プロジェクトのREADMEファイルにスターターをEurekaと統合する方法の例もあります。

26
Alexander.Furer

https://spring.io/blog/2015/03/22/using-google-protocol-buffers-with-spring-mvc-based-rest-services から始まり、その後
SPR-13589 protobuf 3.0.0-beta4のProtobufHttpMessageConverterサポート および関連 SPR-13203 Protostuffライブラリに基づくHttpMessageConverter

これは、proto3の一部のサポートがSpring 5で提供される予定です。開発中なので、プロジェクトに重要なものを投票して上げることをお勧めします。

3
Paul Verest

https://github.com/yidongnan/grpc-spring-boot-starter

サーバー内

@GrpcService(GreeterGrpc.class)
public class GrpcServerService extends GreeterGrpc.GreeterImplBase {

    @Override
    public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
        HelloReply reply = HelloReply.newBuilder().setMessage("Hello =============> " + req.getName()).build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}

クライアントで

@GrpcClient("gRPC server name")
private Channel serverChannel;

GreeterGrpc.GreeterBlockingStub stub = GreeterGrpc.newBlockingStub(serverChannel);
HelloReply response = stub.sayHello(HelloRequest.newBuilder().setName(name).build());
2
Michael Chen

GRPCclientライブラリが必要な場合、つまりスタブを使用する場合は、ライブラリをチェックアウトしてください https://github.com/sfcodes/grpc- client-spring-boot

このライブラリは、クラスパスを自動的にスキャンし、すべてのgRPCスタブクラスを見つけてインスタンス化し、ApplicationContextでBeanとして登録します。 @Autowireそして、他のSpring Beanと同じように注入します。例えば:

@RestController
public class GreeterController {

    @Autowired  // <===== gRPC stub is autowired!
    private GreeterGrpc.GreeterBlockingStub greeterStub;

    @RequestMapping(value = "/sayhello")
    public String sayHello(@RequestParam String name) {
        HelloRequest request = HelloRequest.newBuilder().setName(name).build();
        HelloReply reply = greeterStub.sayHello(request);
        return reply.getMessage();
    }
}

GRPCserverライブラリの場合、LogNet/grpc-spring-boot-starter

1
Semyon Fishman

ここでは、gRpcとeurekaを使用して通信します。このプロジェクトはSpring-bootに基づいています

https://github.com/WThamira/grpc-spring-boot

さらに、領事として登録することもできます。このレポの完全な例

https://github.com/WThamira/gRpc-spring-boot-example

このMaven依存関係はgRpcに役立ちます

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

以下にプラグインショーが必要です

       <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.5.0</version>
                <configuration>
                    <!-- The version of protoc must match protobuf-Java. If you don't depend 
                        on protobuf-Java directly, you will be transitively depending on the protobuf-Java 
                        version that grpc depends on. -->
                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-Java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-Java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
0
wthamira