2

我希望能够RPC根据消息的内容将呼叫转发到不同的实现。

我进行了研究GRPC interceptors,但该网站对此没有很好的解释。我似乎找不到关于这个主题的好文档

我的proto文件看起来像:

message RPCParameters {
  enum DataSource {
    DS1 = 0;
    DS2 = 1;
    ...
    DS100 = 99;
  }
  int32 param1 = 1;
  ...
  DataSource datasource = 10;
}
...
...

message Result {
...
}

service MyService {
  rpc func1(RPCParameters) returns (Something) {}
  ....
  rpc func100(RPCParameters) returns (Something) {}
}

现在在我的代码中,我想根据数据源值有条件地实现函数

目前我正在对每个函数进行条件检查

IE:

MyServiceImplementation

implementation func1(params: Params) {
  switch on params.datasource {
     case DS1 => implementation 1
     case DS2 => implementation 2
     ..
     case DS100 => implementation 100
  }
}

implementation func2(params: Params) {
  switch on params.datasource {
     case DS1 => implementation 1
     case DS2 => implementation 2
     ..
     case DS100 => implementation 100
  }
}
...
implementation func100(params: Params) {
  switch on params.datasource {
     case DS1 => implementation 1
     case DS2 => implementation 2
     ..
     case DS100 => implementation 100
  }
}

所以基本上这非常麻烦且容易出错 - 我需要为每个函数添加一堆样板

我想知道我是否可以改为创建不同的实现者,然后通过中间件将 RPC 调用转发到应该执行逻辑的正确版本。

4

0 回答 0