Skeleton di server gRPC per Java

Puoi scaricare il nostro server gRPC schema per iniziare a implementare il tuo server gRPC completo.

Inizia

  1. Crea un progetto Gradle Java (grpc-booking-service), sotto src/main, crea una directory "proto".

  2. Scarica la definizione del servizio di prenotazione e il protocollo per il controllo di integrità, inseriscili in src/main/proto. Questi file definiscono i metodi e i messaggi gRPC per l'API Actions Center e il controllo di integrità.

  3. Aggiorna il file build.gradle, aggiungi dipendenze e il plug-in protobuf per Gradle. L'introduzione e la guida per protobuf-gradle-plugin sono disponibili qui.

        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. Esegui questo comando per creare la libreria e generare automaticamente il codice dal plug-in di build protoc:

      ./gradlew build
    
  5. Per attivare TLS sul server, in src/main/certificates/ sono richiesti i seguenti file:

    • server_cert_chain.pem la catena di certificati del server in formato PEM
    • server_private_key.pem, la chiave privata per la catena di certificati del server deve essere la chiave privata PKCS#8
    • trusted_client_roots.pem i certificati radice considerati attendibili durante l'autenticazione dei client, puoi scegliere di ottenere questo insieme di certificati radice attendibili da un'autorità come Mozilla oppure installare il set di certificati radice attualmente consigliati da Google Internet Authority G2. In quest'ultimo caso, a volte potresti dover aggiornare manualmente il certificato radice
  6. Recupera il codice campione da questo repository:

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

    inserisci BookingService.java in src/main/java/ext/maps/booking/partner/v2, inserisci Health.java in src/main/java/grpc/health/v1. In entrambi i file, segui i TODO per completare le implementazioni.

  7. Aggiorna il file gradle.build per specificare la generazione di file eseguibili del server aggiungendo il seguente codice:

    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 il server:

    ./gradlew installDist
    
  9. Esegui il server di prenotazione:

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

Struttura finale della directory

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

Altri riferimenti