Как реализовать com.google.protobuf.BlockingRpcChannel для Java-кода, сгенерированного gRPC?

Недавно я взял прото-файл, представляющий службу gRPC, и сгенерировал из него код Java. Однако все интерфейсы ожидают com.google.protobuf.BlockingRpcChannel, и я понятия не имею, как его создать. Когда я смотрю на пример, я вижу, что люди используют io.grpc.ManagedChannel, но это потому, что сгенерированный код Java вместо этого использовал этот тип. Я не уверен, потому что я использую определенную версию protobuf или что?

 public static BlockingInterface newBlockingStub(com.google.protobuf.BlockingRpcChannel channel) 
 {
   return new BlockingStub(channel);
 }

Вот примеры того, что я видел https://www.programcreek.com/java-api-examples/?api=io.grpc.ManagedChannel

В учебнике предлагается сделать следующее, но интерфейсы не совпадают. У меня есть BlockRpcChannel, и в этом примере они могут использовать ManagedChannel. Сгенерированный код java не принимает ManagedChannel [! [https://grpc.io/docs/tutorials/basic/java/sizes[1sizes][1]

В моем прототипе я использую следующий импорт. Не уверен, влияет ли это на поколение

syntax = "proto3";
import "google/api/annotations.proto";
import "google/protobuf/any.proto";

Цель: я хочу выяснить, как создать клиента, который может использовать сгенерированный java код для gRPC.

Ниже мой build.gradle, используемый для генерации прото

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java Library project to get you started.
 * For more details take a look at the Java Libraries chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.2.2/userguide/java_library_plugin.html
 */

plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
    id 'com.google.protobuf' version '0.8.8'
    id 'idea'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    mavenCentral()
    mavenLocal()
}

def grpcVersion = '1.27.1' // CURRENT_GRPC_VERSION
def protobufVersion = '3.11.0'
def protocVersion = protobufVersion

dependencies {
    compile("io.grpc:grpc-netty:" + grpcVersion)
    compile("io.grpc:grpc-protobuf:" + grpcVersion)
    compile("com.google.protobuf:protobuf-java:3.11.0")
    compile("com.google.protobuf:protobuf-java-util:3.11.0")
    compile("io.grpc:grpc-stub:" + grpcVersion)
    compile("io.envoyproxy.protoc-gen-validate:protoc-gen-validate:0.3.0")
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:${protocVersion}"
    }

    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }

    generatedFilesBaseDir = "$projectDir/src"

    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}

sourceSets {
    main {
        proto {
            // In addition to the default "src/main/proto"
            srcDir "proto"
            srcDir "src/main/grpc"
        }
    }
}

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = "sources"
    from sourceSets.main.allSource
}

Любая помощь приветствуется? Спасибо, Дерек


person darewreck    schedule 10.03.2020    source источник
comment
Как вы генерируете Java-код из прото-файла?   -  person Anar Sultanov    schedule 10.03.2020
comment
@AnarSultanov Я создал java-проект, который использовал плагин gradle для генерации прото. Я прикрепил build.gradle.   -  person darewreck    schedule 10.03.2020


Ответы (1)


@creamsoup был правильным. Опция - это то, что вызвало проблему и помешало другому плагину, который сгенерировал gPRC, работать должным образом.

Спасибо!

person darewreck    schedule 10.03.2020
comment
Укажите точное решение, когда вы дадите свой ответ. Я понятия не имею, какая опция вызвала эту проблему и помешала плагину. - person Veridian Dynamics; 13.07.2021