当前位置: 首页 > 知识库问答 >
问题:

gRPC java-编译。原型文件

史劲
2023-03-14

我已经编译了我的。proto文件使用protobuf编译器并收到了一组Java文件。我收到了一份原始文件。java文件和。中每个项目的java文件。proto文件,包括消息类型和每个RPC调用,例如publicKeyRequest。java和Quote。java作为RPC和请求参数类型。

这是所有需要的文件吗,因为我似乎仍然无法从服务器获得任何简单的响应?

我想为PublicKeyRequest RPC调用生成一个请求。我生成了请求对象,但我不知道如何通过通道实际发送它。

这是完整的。原型文件:

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.decryptiondevice";
option java_outer_classname = "DecryptionDeviceProto";

package decryptiondevice;

service DecryptionDevice {

    // Decryption Request RPC
    //
    // Request contains ciphertext and proof
    // Returns the plaintext record
    rpc DecryptRecord(DecryptionRequest) returns (Record) {}

    // Get Signed Root Tree Hash RPC
    //
    // Caller provides a nonce
    // Returns a signed RTH and nonce
    rpc GetRootTreeHash(RootTreeHashRequest) returns (RootTreeHash) {}


    // Get Public key RPC
    //
    // Returns a Remote attestation report containing the public key as user        data
       rpc GetPublicKey(PublicKeyRequest) returns (Quote) {}
}


// Decryption Request
// - Byte array containing ciphertext
// - Proofs represented as JSON trees
message DecryptionRequest {
    bytes ciphertext        = 1;
    string proofOfPresence  = 2;
    string proofOfExtension = 3;
}


// A plaintext record
message Record {
    bytes plaintext = 1;
}


// RTH request contains
// - A random nonce
message RootTreeHashRequest {
    bytes nonce = 1;
}


// Root Tree Hash
// Random nonce used as message ID
// Signature over rth and nonce
message RootTreeHash {
    bytes rth   = 1;
    bytes nonce = 2;
    bytes sig   = 3;
}


// Public key request message
message PublicKeyRequest {
    bytes nonce = 1;
}


// Attestation Quote, containing the public key
message Quote {
    string quote = 1; //some format.. to be defined later
    //PEM formatted key
    bytes RSA_EncryptionKey = 2;
    bytes RSA_VerificationKey = 3;
}

这是我试图在客户端运行的代码:

public static void main(String[] args) {

    DeviceClient client = new DeviceClient("localhost", 50051);
    MannagedChanel channel = ManagedChannelBuilder.forAddress("localhost", 50051).usePlaintext(true);

    ByteString nonce = ByteString.copyFromUtf8("someRandomString");
    PublicKeyRequest keyRequest = PublicKeyRequest.newBuilder().setNonce(nonce).build();

    // Here I want to send this to the server
    ByteString response = DecryptionDeviceProto.getKey(keyRequest, channel);//this line is not even close to being valid, but this is the sort thing I wish to achieve

    Sys.out.println(response);
}

抱歉,如果这是非常错误的,我是gRPC的新手。关于该系统的几点:

  • 已经在Go中编写了一个客户端和服务器,该Go已经过测试并可以使用它。原型文件

共有1个答案

孙鑫鹏
2023-03-14

需要生成两组文件:Java Protobuf和Java gRPC。据我所知,对于除Go之外的所有语言,这是两个独立的生成步骤(可以组合成一个协议调用,但它们在概念上是独立的)。

看起来您正在生成Java Protobuf代码,而不是Java gRPC代码。您需要使用protoc gen grpc java插件来访问protoc。如果您使用的是Maven或Gradle,请阅读grpc java的自述。如果您手动运行protoc,可以从Maven Central下载预构建的二进制文件,并查看类似问题的答案。

 类似资料:
  • 查看google fhir的自述文件,它说要运行,这是可行的,但是没有编译任何协议文件。 运行返回一系列关于找不到其他proto的错误。这会一直追溯到“描述符”。“proto”,它不是文件夹中的proto。该目录中的任何协议文件都不会手动编译为java文件。 *另一方面,我能够从其他来源获取其他protos示例并成功编译它们。 使现代化 运行命令proto--proto_path=proto/st

  • 我目前正在玩Jaeger Query,并试图通过使用gRPC的应用编程接口访问其内容。我不熟悉gRPC,但我的理解是,我需要在相关的原始文件上使用Python gRPC编译器(grpcio_tools.protoc)来获取有用的Python定义。我想做的是找出通过API访问Jaeger Query的方法,而无需前端UI。 目前,我一直在编译proto文件。每次尝试时,我都会遇到依赖性问题(导入“f

  • 编译器架构

  • 校验码 奇偶校验 通常用于对少量数据的校验 奇校验 将信息数据的各位进行模二加法并作为校验码的称为奇校验。 偶校验 将信息数据的各位进行模二加法并取反作为校验码的称为偶校验。 海明码 采用多位校验码的方式,可以发现、纠正错误。数据位和校验位必须满足关系式:2校验位-1≥数据位+校验位。码距至少是3。 循环冗余校验码 检错能力非常强,但是不能纠错。编码长度(CRC字长)为数据位+校验位 文法 终结符

  • 词法分析器 语法分析器 语义分析及中间代码生成 代码优化 代码生成

  • 我试图生成原型文件dart文件与协议插件遵循此指令https://grpc.io/docs/quickstart/dart/但当我运行此命令行 发生这种类型的错误 使用的依赖项 你好世界原型 我还尝试以下命令 如何生成或编译。飞镖/颤振中的原型文件 提前感谢:)