【问题标题】:io.grpc.StatusRuntimeException: UNIMPLEMENTED: unknown service manipula.core2.core.proto.Centrifugoio.grpc.StatusRuntimeException:未实现:未知服务 manipula.core2.core.proto.Centrifugo
【发布时间】:2021-06-09 17:37:53
【问题描述】:

我很难以正确的方式为 JAVA 编译这个 proto 文件,因为现在最多 2 天,我首先尝试在命令行上下载 Java 插件,但只生成了一个文件,然后切换到成功但不完全的maven方法!

这是原型文件:

syntax = "proto3";

package manipula.core2.core.proto;

option java_multiple_files = true;
option java_package = "manipula.core2.core.proto";
option java_outer_classname = "centrifugo";

message ClientInfo {
    string user = 1;
    string client = 2;
    bytes conn_info = 3;
    bytes chan_info = 4;
}

message Publication {
    string uid = 1;
    bytes data = 2;
    ClientInfo info = 3;
}

message Error {
    uint32 code = 1;
    string message = 2;
}

enum MethodType {
    
    PUBLISH = 0;
    BROADCAST = 1;
    UNSUBSCRIBE = 2;
    DISCONNECT = 3;
    PRESENCE = 4;
    PRESENCE_STATS = 5;
    HISTORY = 6;
    HISTORY_REMOVE = 7;
    CHANNELS = 8;
    INFO = 9;
}

message Command {
    uint32 id = 1;
    MethodType method = 2;
    bytes params = 3;
}

message Reply {
    uint32 id = 1;
    Error error = 2;
    bytes result = 3;
}

message PublishRequest {
    string channel = 1;
    bytes data = 2;
}

message PublishResponse {
    Error error = 1;
    PublishResult result = 2;
}

message PublishResult {}

message BroadcastRequest {
    repeated string channels = 1;
    bytes data = 2;
}

message BroadcastResponse {
    Error error = 1;
    BroadcastResult result = 2;
}

message BroadcastResult {}

message UnsubscribeRequest {
    string channel = 1;
    string user = 2;
}

message UnsubscribeResponse {
    Error error = 1;
    UnsubscribeResult result = 2;
}

message UnsubscribeResult {}

message DisconnectRequest {
    string user = 1;
}

message DisconnectResponse {
    Error error = 1;
    DisconnectResult result = 2;
}

message DisconnectResult {}

message PresenceRequest {
    string channel = 1;
}

message PresenceResponse {
    Error error = 1;
    PresenceResult result = 2;
}

message PresenceResult {
    map<string, ClientInfo> presence = 1;
}

message PresenceStatsRequest {
    string channel = 1;
}

message PresenceStatsResponse {
    Error error = 1;
    PresenceStatsResult result = 2;
}

message PresenceStatsResult {
    uint32 num_clients = 1;
    uint32 num_users = 2;
}

message HistoryRequest {
    string channel = 1;
}

message HistoryResponse {
    Error error = 1;
    HistoryResult result = 2;
}

message HistoryResult {
    repeated Publication publications = 1;
}

message HistoryRemoveRequest {
    string channel = 1;
}

message HistoryRemoveResponse {
    Error error = 1;
    HistoryRemoveResult result = 2;
}

message HistoryRemoveResult {}

message ChannelsRequest {}

message ChannelsResponse {
    Error error = 1;
    ChannelsResult result = 2;
}

message ChannelsResult {
    repeated string channels = 1;
}

message InfoRequest {}

message InfoResponse {
    Error error = 1;
    InfoResult result = 2;
}

message InfoResult {
    repeated NodeResult nodes = 1;
}

message NodeResult {
    string uid = 1;
    string name = 2;
    string version = 3;
    uint32 num_clients = 4;
    uint32 num_users = 5;
    uint32 num_channels = 6;
    uint32 uptime = 7;
    Metrics metrics = 8;
}

message Metrics {
    double interval = 1;
    map<string, double> items = 2;
}

service Centrifugo {
    rpc Publish (PublishRequest) returns (PublishResponse) {}
    rpc Broadcast (BroadcastRequest) returns (BroadcastResponse) {}
    rpc Unsubscribe (UnsubscribeRequest) returns (UnsubscribeResponse) {}
    rpc Disconnect (DisconnectRequest) returns (DisconnectResponse) {}
    rpc Presence (PresenceRequest) returns (PresenceResponse) {}
    rpc PresenceStats (PresenceStatsRequest) returns (PresenceStatsResponse) {}
    rpc History (HistoryRequest) returns (HistoryResponse) {}
    rpc HistoryRemove (HistoryRemoveRequest) returns (HistoryRemoveResponse) {}
    rpc Channels (ChannelsRequest) returns (ChannelsResponse) {}
    rpc Info (InfoRequest) returns (InfoResponse) {}
}

这里是我的客户:

ManagedChannel channel = ManagedChannelBuilder.forAddress("192.168.99.100", 10000).usePlaintext().build();

CentrifugoGrpc.CentrifugoBlockingStub apiWs = CentrifugoGrpc.newBlockingStub(channel);

ByteString dataToSend = ByteString.copyFromUtf8("message");

PublishRequest request = PublishRequest.newBuilder().setChannel("public:test").setData(dataToSend).build();

try {
    PublishResponse pubResp = apiWs.publish(request);

    System.out.println("+************************+");
    System.out.println(pubResp);
    System.out.println("+************************+");
} catch (final Exception e) {
    System.out.println(e);
}

服务器是安装在 Docker 容器上的 Centrifugo(用于实时 websockets)。

这是我几天以来收到的错误:

io.grpc.StatusRuntimeException: UNIMPLEMENTED: unknown service manipula.core2.core.proto.Centrifugo

我认为问题出在 proto 文件的配置上:

syntax = "proto3";

package manipula.core2.core.proto;

option java_multiple_files = true;
option java_package = "manipula.core2.core.proto";
option java_outer_classname = "centrifugo";

请对这个问题有任何想法以及如何解决它?欢迎您的观点!

【问题讨论】:

  • 我必须使用与服务器上相同的包名。

标签: java protocol-buffers grpc grpc-java proto


【解决方案1】:

我必须使用与服务器上相同的包名。

package api;

【讨论】:

  • 我看到了同样的错误。您能否更详细地解释您的发现?我有一个用 python 实现的 grpc 服务器,并试图用一个 java 客户端做 rpc。
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多