שלד שרת gRPC ל-Java

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

מתחילים

  1. יוצרים פרויקט gradle של java (grpc-booking-service), מתחת ל-src/main, ויוצרים ספריית 'proto'.

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

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

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

מקורות מידע אחרים