Szkielet serwera gRPC dla Javy

Możesz pobrać nasz szkieletowy serwer gRPC, który ułatwi Ci rozpoczęcie wdrażania pełnego serwera gRPC.

Rozpocznij

  1. Utwórz projekt Gradle Java (grpc-booking-service), a w katalogu src/main utwórz katalog „proto”.

  2. Pobierz definicję usługi rezerwacji i protokół kontroli stanu, a następnie umieść je w sekcji src/main/proto. Pliki te definiują metody gRPC i komunikaty dla interfejsu Actions Center API oraz kontroli stanu.

  3. Zaktualizuj plik build.gradle, dodaj zależności i wtyczkę protobuf dla Gradle. Wprowadzenie i przewodnik dotyczący protobuf-gradle-plugin 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 z wtyczki kompilacji Protoc:

      ./gradlew build
    
  5. Aby włączyć protokół TLS na serwerze, w atrybucie src/main/certificates/ wymagane są te pliki:

    • server_cert_chain.pem – łańcuch certyfikatów serwera w formacie PEM.
    • server_private_key.pem – kluczem prywatnym łańcucha certyfikatów serwera musi być klucz prywatny PKCS#8.
    • trusted_client_roots.pem – zaufane certyfikaty główne podczas uwierzytelniania klientów. Możesz uzyskać ten zestaw zaufanych certyfikatów głównych od urzędu takiego jak Mozilla lub zainstalować zestaw certyfikatów głównych obecnie zalecanych przez urząd Google Internet Authority G2. W drugim przypadku konieczne może być czasem ręczne zaktualizowanie 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ść BookingService.java w sekcji src/main/java/ext/maps/booking/partner/v2, a Health.java umieść w sekcji src/main/java/grpc/health/v1. Aby dokończyć implementacje, w obu plikach postępuj zgodnie z Zadaniami do wykonania.

  7. Zaktualizuj plik gradle.build, aby określić generowanie 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. Kompilacja 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