Szkielet serwera gRPC dla Javy

Możesz pobrać nasz szkielet serwera gRPC ułatwiający rozpoczęcie wdrażania pełnego serwera gRPC.

Rozpocznij

  1. Utwórz projekt Gradle w Javie (usługa grpc-booking-service) w folderze src/main. utworzyć proto, katalogu.

  2. Pobierz usługę rezerwacji definicja i kontroli stanu protokół, możesz je umieścić w elemencie src/main/proto. Definiują one metody gRPC dla interfejsu Actions Center API i kontroli stanu.

  3. Zaktualizuj plik build.gradle, dodaj zależności i wtyczkę protobuf dla Gradle. Wprowadzenie i przewodnik po wtyczce protobuf-gradle znajdziesz tutaj.

        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. Uruchom to polecenie, aby utworzyć bibliotekę i automatycznie wygenerować kod na podstawie wtyczka do tworzenia kompilacji protoc:

      ./gradlew build
    
  5. Aby włączyć TLS na serwerze, w sekcji src/main/certificates/ wymagane są następujące pliki:

    • server_cert_chain.pem łańcuch certyfikatów serwera w formacie PEM.
    • server_private_key.pem klucz prywatny certyfikatu serwera. łańcuch, musi być kluczem prywatnym PKCS#8
    • trusted_client_roots.pem certyfikaty główne, które są zaufane podczas uwierzytelniania klientów, możesz wybrać opcję uzyskiwania takiego zestawu zaufanych źródeł takich jak Mozilla lub zainstaluj zestaw rdzeni obecnie zalecanych przez urząd internetowy Google G2. W tym drugim przypadku być może trzeba ręczne aktualizowanie certyfikatu głównego
  6. Pobierz przykładowy kod z tego repozytorium:

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

    umieść plik BookingService.java pod src/main/java/ext/maps/booking/partner/v2, pod nagłówkiem Health.java src/main/java/grpc/health/v1. W obu plikach wykonaj instrukcje TODOs, aby dokończ implementacje.

  7. Zaktualizuj plik gradle.build, aby określić generację pliku wykonywalnego serwera dodając ten kod:

    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. Kompilowanie serwera:

    ./gradlew installDist
    
  9. Uruchom serwer rezerwacji:

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

Ostateczna struktura katalogów

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

Inne materiały