ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8888).usePlaintext().build();
Grpc.Stub stub = CLIGrpc.newStub(managedChannel);
Когда я должен создать заглушку? Когда вызывается каждый метод или только один раз?
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8888).usePlaintext().build();
Grpc.Stub stub = CLIGrpc.newStub(managedChannel);
Когда я должен создать заглушку? Когда вызывается каждый метод или только один раз?
Только один раз. После создания заглушки вы продолжаете вызывать для нее методы.
Уровень заглушки - это то, что доступно большинству разработчиков и обеспечивает безопасные привязки к любой модели данных / 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));
}