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

从gRPC服务内调用时gRPC客户端不工作

何涵畅
2023-03-14

快速免责声明,我是非常新的gRPC和RPC一般,所以请有耐心

rpc notifyPeers(NotifyPeersRequest) returns (NotifyPeersResponse);
@Override
public void notifyPeers(NotifyPeersRequest request, StreamObserver<NotifyPeersResponse> responseObserver) {
    logger.debug("gRPC 'notifyPeers' request received");
    String host = request.getHost();
    
   
    for (PeerClient c : clients.values()) {   
        c.addPeer(host);    // <----  this call
    }

    NotifyPeersResponse response = NotifyPeersResponse.newBuilder()
            .setResult(result)
            .build();

    responseObserver.onNext(response);
    responseObserver.onCompleted();
}

对等点列表、客户端是在以前的rpc调用中构建的。

ManagedChannel channel = ManagedChannelBuilder.forTarget(peer).usePlaintext().build();
ClientB client = new ClientB(channel);
clients.put(peer, client);

客户

rpc addPeer(AddPeerRequest) returns (AddPeerResponse);rpc addPeer(AddPeerRequest) returns (AddPeerResponse);

服务器端实现,

@Override
public void addPeer(AddPeerRequest addPeerRequest, StreamObserver<AddPeerResponse> responseObserver)  {
    logger.info("gRPC 'addPeer' request received");
    boolean result = peer.addPeer(host);
    AddPeerResponse response = AddPeerResponse.newBuilder()
                .setResponse(result)
                .build();
    responseObserver.onNext(response);
    responseObserver.onCompleted();
public boolean addPeer(String host) {
    AddPeerRequest request = AddPeerRequest.newBuilder().setHost(host).build();
    logger.info("Sending 'addPeer' request");
    AddPeerResponse response = blockingStub.addPeer(request);
    return response.getResponse();
}

共有1个答案

满元凯
2023-03-14

未知消息是服务器端未传递给客户端的异常。您可能需要增加服务器上的日志级别,以尝试查找根本原因。

在本文中,创建如下所示的通道,使其能够看到更有意义的错误消息:

ManagedChannel channel = NettyChannelBuilder.forAddress( host, port )
                .protocolNegotiator(ProtocolNegotiators.serverPlaintext() )
 类似资料:
  • 我有一个用。NET核心实现的gRPC服务器,我希望与运行在。NET Framework中的控制台应用程序联系。 我在发送请求时得到以下异常: rpc.core.rpcexception:'statuscode=“不可用”,detail=“DNS解析失败服务:https://localhost:5001”,debugexception=“grpc.core.internal.coreerrordet

  • 我已经看了很长一段时间了,在互联网上浏览了所有不同的帖子,看看是否能找到有相同问题的人,但不知为什么,我似乎是唯一有这个问题的人。 我有一个ASP。net核心服务器,运行Grpc的基本迎宾服务。使用程序“BloomRPG”调用此服务器效果很好,而且响应时间也很长。然而,当我试图从自己编写的(非常基本的)客户机上执行同样的操作时,我会遇到以下错误: 在客户机上: dbug:Grpc。网客户内部的Gr

  • 我的项目是在服务器上读取一个图像,进行一些处理,然后将整个图像传递给客户端。客户端接收图像并进行更多处理,然后将一些输出值返回给服务器。服务器和客户端之间使用的映像大小为[640x480x3]。 以下是我想到的实现这个问题的各种技术: 通过消息将整个像素值从服务器传递到客户端 在SO中有各种各样的答案。我目前正在努力让它工作。 服务器和客户端之间的这种消息传递模式是否可能?如果是,请提供一些文档参

  • 下面的代码片段显示了如何在gRPC AspNet核心应用程序中启用gRPC web: 客户端应用程序的代码如下所示:

  • 有可能从客户端向服务器抛出异常吗?我们有一个从服务器到客户端的开放流: 当我尝试这样的事情时: 我在客户端的StreamObserver.on错误中获得了异常,但在服务器端没有异常。

  • 将grpc定义的服务视为: 并利用客户端连接到此服务类似于: 如果我们要在一个单独的线程中生成调用,那么处理终止一个永远运行、我们不想再使用的grpc连接的正确方法是什么?是否有任何连接或流控制方法可以调用?