Esqueleto de servidor gRPC para Java

Puedes descargar nuestro servidor de gRPC esqueleto para comenzar a implementar tu servidor de gRPC completo.

Comenzar

  1. Crea un proyecto de Gradle de Java (grpc-booking-service) en src/main y crea un directorio "proto".

  2. Descarga la definición del servicio de reservas y el protocolo de verificación de estado, y colócalos en src/main/proto. Estos archivos definen los métodos y los mensajes de gRPC para la API de Actions Center y la Verificación de estado.

  3. Actualiza el archivo build.gradle, agrega dependencias y el complemento protobuf para Gradle. Puedes encontrar la introducción y la guía de protobuf-gradle-plugin aquí.

        apply plugin: 'java'
        apply plugin: 'com.google.protobuf'
    
        repositories {
            mavenCentral()
        }
    
        // updating the version in our release process.
        def grpcVersion = '1.8.0' // CURRENT_GRPC_VERSION
        def nettyTcNativeVersion = '2.0.7.Final'
    
        dependencies {
            compile "com.google.api.grpc:proto-google-common-protos:0.1.9"
            compile "io.grpc:grpc-netty:${grpcVersion}"
            compile "io.grpc:grpc-protobuf:${grpcVersion}"
            compile "io.grpc:grpc-stub:${grpcVersion}"
            compile "io.netty:netty-tcnative-boringssl-static:${nettyTcNativeVersion}"
            compile "org.bouncycastle:bcmail-jdk15:1.46"
    
            testCompile "io.grpc:grpc-testing:${grpcVersion}"
            testCompile "junit:junit:4.12"
            testCompile "org.mockito:mockito-core:1.9.5"
        }
    
        buildscript {
            repositories {
                mavenCentral()
            }
            dependencies {
                // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
                // gradle versions
                classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.1'
            }
        }
    
        protobuf {
            protoc {
                artifact = 'com.google.protobuf:protoc:3.4.0'
            }
            plugins {
                grpc {
                    artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
                }
            }
            generateProtoTasks {
                all()*.plugins {
                    grpc {}
                }
            }
        }
    
        // Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
        sourceSets {
            main {
                java {
                    srcDirs 'build/generated/source/proto/main/grpc'
                    srcDirs 'build/generated/source/proto/main/java'
                }
            }
        }
    
        // Generate IntelliJ IDEA's .idea & .iml project files
        apply plugin: 'idea'
    
        // Provide convenience executables for trying out the examples.
        apply plugin: 'application'
    
        startScripts.enabled = false
    
  4. Ejecuta el siguiente comando para compilar la biblioteca y generar código automáticamente desde el complemento de compilación de protoc:

      ./gradlew build
    
  5. Para habilitar TLS en el servidor, en src/main/certificates/, se requieren los siguientes archivos:

    • server_cert_chain.pem La cadena de certificados del servidor en formato PEM
    • server_private_key.pem Tu clave privada para la cadena de certificados del servidor debe ser la clave privada PKCS#8.
    • trusted_client_roots.pem los certificados raíz de confianza cuando se autentican clientes, puedes obtener este conjunto de raíces de confianza de una autoridad como Mozilla o instalar el conjunto de raíces que recomienda actualmente la Autoridad de Internet de Google G2. En el último caso, es posible que, en algunos momentos, tengas que actualizar el certificado raíz de forma manual.
  6. Recupera el código de muestra de este repositorio:

      git clone https://maps-booking.googlesource.com/java-maps-booking-grpc-server-skeleton
    

    coloca BookingService.java en src/main/java/ext/maps/booking/partner/v2 y Health.java en src/main/java/grpc/health/v1. En ambos archivos, sigue las tareas pendientes para completar tus implementaciones.

  7. Agrega el siguiente código para actualizar el archivo gradle.build y especificar la generación del ejecutable del servidor:

    task bookingService(type: CreateStartScripts) {
        mainClassName = 'ext.maps.booking.partner.v2.BookingService'
        applicationName = 'booking-service'
        outputDir = new File(project.buildDir, 'tmp')
        classpath = jar.outputs.files + project.configurations.runtime
    }
    
    applicationDistribution.into('bin') {
        from(bookingService)
        fileMode = 0755
    }
    
  8. Compila el servidor:

    ./gradlew installDist
    
  9. Ejecuta el servidor de reservas:

    ./build/install/grpc-booking-service/bin/booking-service
    

Estructura de directorios final

src
|---main
    |---certificates
        |---server_cert_chain.pem
        |---server_private_key.pem
        |---trusted_client_roots.pem
    |---java
        |---ext.maps.booking.partner.v2.BookingService.java
        |---grpc.health.v1.Health.java
    |---proto
        |---booking_service.proto
        |---health.proto
|---test

Otras referencias