Как перехватить и переслать вызов GRPC в зависимости от содержания сообщения

Я хочу быть в состоянии переслать 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) {}
}

Теперь в моем коде я хочу условно реализовать функции, основанные на значении источника данных

В настоящее время я делаю условную проверку в каждой функции

то есть:

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-вызов на правильную версию, которая должна выполнять логику.

0 ответов

Другие вопросы по тегам