שלד שרת gRPC ל-Java

אפשר להוריד את שרת ה-gRPC שלנו כדי להתחיל בהטמעה של השרת המלא של gRPC.

תחילת העבודה

  1. יוצרים פרויקט Java gradle (gpc-booking-service), בעמודה src/main, ליצור 'פרוטו'

  2. מורידים את שירות ההזמנות הגדרה ובדיקות תקינות Protocol, להציב אותם בקטע src/main/proto. הקבצים האלה מגדירים את השיטות של gRPC הודעות ל-Actions Center API ול-Health Check.

  3. מעדכנים את הקובץ build.gradle, מוסיפים יחסי תלות ואת הפלאגין protobuf ל-Gradle. ניתן להשלים את ההקדמה והמדריך עבור protobuf-gradle-פלאגין תוכלו למצוא כאן.

        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. מריצים את הפקודה הבאה כדי ליצור את הספרייה וליצור קוד באופן אוטומטי מ: פלאגין build של protoc:

      ./gradlew build
    
  5. כדי להפעיל TLS בשרת, בקטע src/main/certificates/ הקבצים הבאים נדרשים:

    • server_cert_chain.pem את שרשרת אישורי השרת שלך בפורמט PEM
    • server_private_key.pem את המפתח הפרטי שלך לאישור השרת שרשרת, צריך להיות המפתח הפרטי PKCS#8
    • trusted_client_roots.pem: אישורי הבסיס המהימנים כשאתם מבצעים אימות של לקוחות, תוכלו לבחור לקבל את הקבוצה הזו של שורשים מהימנים מרשות כמו Mozilla, או התקן את ההגדרה מהשורשים המומלצים כרגע על ידי רשות האינטרנט של Google G2. במקרה השני, ייתכן כדי לעדכן באופן ידני את אישור הבסיס מדי פעם
  6. מאחזרים את הקוד לדוגמה מהמאגר הזה:

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

    מזינים את BookingService.java בקטע src/main/java/ext/maps/booking/partner/v2, מציבים את החלק Health.java בקטע src/main/java/grpc/health/v1. בשני הקבצים, פועלים לפי משימות לביצוע כדי להשלים את ההטמעה.

  7. מעדכנים את הקובץ gradle.build כדי לציין את גנרציה של קובץ ההפעלה של השרת באמצעות הוספת הקוד הבא:

    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. הידור השרת:

    ./gradlew installDist
    
  9. מפעילים את שרת ההזמנות:

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

המבנה הסופי של הספרייה

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

חומר עזר אחר