Когда я должен создать асинхронную заглушку ‹GRPC›?

ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8888).usePlaintext().build();
Grpc.Stub stub = CLIGrpc.newStub(managedChannel);

Когда я должен создать заглушку? Когда вызывается каждый метод или только один раз?


person Ozturk    schedule 10.09.2020    source источник


Ответы (2)


Только один раз. После создания заглушки вы продолжаете вызывать для нее методы.

person San P    schedule 10.09.2020
comment
Я хочу установить тайм-аут для каждого метода, но тайм-аут можно установить для заглушки, а не для метода. Как установить тайм-аут для каждого метода? - person Ozturk; 11.09.2020
comment
CallOptions.withDeadlineAfter () github.com/grpc/grpc-java/blob/master/api/src/main/java/io/grpc/. Вы можете установить CallOptions для любого вызова. - person San P; 14.09.2020

Уровень заглушки - это то, что доступно большинству разработчиков и обеспечивает безопасные привязки к любой модели данных / IDL / интерфейсу, который вы адаптируете.

Таким образом, вы в основном создаете одну заглушку для взаимодействия с одной удаленной службой. Это интерфейс на стороне клиента для вызова удаленной службы. Обычно рекомендуется повторно использовать одну и ту же заглушку для нескольких вызовов.

Крайние сроки RPC реализованы как CallOptions, к которому можно получить доступ / изменить до отправки вызова. Если вы хотите установить крайний срок для каждого отдельного RPC независимо, вы можете реализовать ClientInterceptor, который изменяет CallOptions вызова динамическими значениями. Что-то подобное

private final AtomicInteger deadlineNano = new AtomicInteger();

class DeadlineAttachingInterceptor implements ClientInterceptor {
  @Override
  public <ReqT, RespT> ClientCall<ReqT, RespT>interceptCall(MethodDescriptor<ReqT, RespT> method,
      CallOptions callOptions, Channel next) {
  return next.newCall(method, callOptions.withDeadlineAfter(deadlineNano.get(), TimeUnit.NANOSECONDS));
}
person voidzcy    schedule 18.09.2020