שרידי שרת gRPC ל-Java

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

תחילת העבודה

  1. יוצרים פרויקט gradle ב-Java‏ (grpc-booking-service), יוצרים ספרייה בשם 'proto' בקטע src/main.

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

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

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

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

    • server_cert_chain.pem שרשרת האישורים של השרת בפורמט PEM
    • server_private_key.pem המפתח הפרטי של שרשרת האישורים של השרת, צריך להיות המפתח הפרטי מסוג PKCS#8
    • trusted_client_roots.pem אישורי הבסיס המהימנים שמשמשים לאימות לקוחות. אפשר לקבל את קבוצת אישורי הבסיס המהימנים הזו מרשות כמו Mozilla, או להתקין את קבוצת אישורי הבסיס המומלצת כרגע על ידי Google Internet Authority 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. בשני הקבצים, פועלים לפי TODOs כדי להשלים את ההטמעות.

  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. מריצים את ה-compile של השרת:

    ./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

מקור אחר