Grpc - 将不同的对象传递给grpc服务方法

时间:2017-08-09 10:42:05

标签: grpc grpc-java

在聊天服务中,我们从客户端收到请求并根据它发送响应。 但我的情况是,Server必须从类的外部方法发送一些不同的对象。

例如,

public StreamObserver<SalaryDetails> message(StreamObserver<Employee> responseObserver) {
    observers.add(responseObserver);

    return new StreamObserver<SalaryDetails>() {

        @Override
        public void onCompleted() {
            observers.remove(responseObserver); 
        }

        @Override
        public void onError(Throwable arg0) {
            observers.remove(responseObserver); 
        }

        @Override
        public void onNext(SalaryDetails details) {
            for(StreamObserver<MetricsToVE> observer : observers) {
                **observer.onNext(Employee.newBuilder()
                    .setName("AA")
                    .setCity("B")
                    .build());**
            }
        }
    };
}

在下面的语句中,我已经对字段进行了硬编码,我应该如何将对象从不同的方法传递到grpc服务类。

1 个答案:

答案 0 :(得分:0)

这取决于响应值变化的原因:

  1. 如果客户端可以根据请求预测响应类型是什么,那么您应该让客户端根据类型调用不同的方法
  2. 如果API可以了解可能的选项,那么您可以使用protobuf's oneof
  3. 如果数据是任意的,那么您可以使用protobuf's Any
  4. 似乎#2很可能是你的情况。