إطار عمل خادم gRPC لنظام التشغيل Java

يمكنك تنزيل إطار عمل خادم gRPC للمساعدة في بدء تنفيذ خادم gRPC الكامل.

البدء

  1. أنشئ مشروعًا باستخدام أداة Gradle لبرمجة Java (grpc-booking-service)، وتحت src/main، أنشئ دليلاً باسم proto.

  2. نزِّل تعريف خدمة الحجز وبروتوكول التحقّق من الصحة، ثم ضَعهما ضمن src/main/proto. تحدِّد هذه الملفات طرق gRPC و الرسائل لواجهة برمجة التطبيقات Actions Center API وHealth Check.

  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:

      ./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. في كلا الملفَّين، اتّبِع المهام التي يجب إكمالها لإكمال عمليات التنفيذ.

  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

مرجع آخر