web-dev-qa-db-fra.com

Utilisation de Spring Boot avec gRPC et Protobuf

Quelqu'un ayant des exemples ou des idées utilisant gRPC avec Spring Boot?

24
Markus

Si cela vous concerne toujours, j’ai créé gRPC spring-boot-starter ici .

(grpc-spring-boot-starter} auto-configure et exécute le serveur gRPC intégré avec les beans @ GRpcService-enabled 

L'exemple le plus simple: 

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

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

}

Vous trouverez également un exemple d'intégration du démarreur avec Eureka dans le fichier README du projet. 

21
Alexander.Furer

À partir de https://spring.io/blog/2015/03/22/using-google-protocol-buffers-with-spring-mvc-based-rest-services , puis
jetez un oeil à SPR-13589 Prise en charge de ProtobufHttpMessageConverter pour protobuf 3.0.0-beta4 et de SPR-13203 HttpMessageConverter basé sur la bibliothèque Protostuff

C’est un soutien pour proto3 qui arrivera au printemps 5. Comme il est en cours de développement, on est encouragé à voter et à soulever ce qui est important pour leur projet.

3
Paul Verest

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

En serveur

@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();
    }
}

Chez le client

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

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

Ici, j'utilise gRPC et eureka pour la communication. Ce projet basé sur Spring-boot

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

en outre, vous pouvez également vous inscrire en tant que consul. exemple complet dans ce repo

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

cette dépendance maven aide à 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>

et besoin d'afficher le plugin ci-dessous 

       <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

Si vous avez besoin d’une bibliothèque gRPC client, c’est-à-dire consommer des souches, consultez ma bibliothèque https://github.com/sfcodes/grpc-client-spring-boot

Cette bibliothèque analysera automatiquement votre chemin de classe, trouvera toutes les classes de stub gRPC, les instanciera et les enregistrera en tant que beans avec ApplicationContext; vous permettant de facilement @Autowire et de les injecter comme tout autre haricot Spring. Par exemple:

@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();
    }
}

Pour la bibliothèque gRPC server, je recommanderais également LogNet/grpc-spring-boot-starter.

0
Semyon Fishman