ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8888).usePlaintext().build();
Grpc.Stub stub = CLIGrpc.newStub(managedChannel);
Kapan saya harus membuat rintisan? Kapan setiap metode dipanggil atau hanya sekali?
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8888).usePlaintext().build();
Grpc.Stub stub = CLIGrpc.newStub(managedChannel);
Kapan saya harus membuat rintisan? Kapan setiap metode dipanggil atau hanya sekali?
Hanya sekali. Setelah rintisan dibuat, Anda terus memanggil metode di dalamnya.
Lapisan Stub adalah lapisan yang diekspos ke sebagian besar pengembang dan menyediakan pengikatan tipe-aman ke model data/IDL/antarmuka apa pun yang Anda adaptasi.
Jadi pada dasarnya Anda membuat satu rintisan untuk berinteraksi dengan satu layanan jarak jauh. Ini adalah antarmuka sisi klien untuk menjalankan layanan jarak jauh. Biasanya disarankan untuk menggunakan kembali Stub yang sama untuk beberapa panggilan.
Batas waktu RPC diimplementasikan sebagai CallOptions
, yang dapat diakses/dimutasi sebelum panggilan dikirim. Jika Anda ingin menetapkan tenggat waktu untuk masing-masing RPC secara terpisah, Anda dapat menerapkan ClientInterceptor yang mengubah CallOptions
panggilan dengan nilai dinamis. Sesuatu yang mirip dengan
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));
}