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);
เมื่อใดที่ฉันต้องสร้างต้นขั้ว? เมื่อทุกวิธีถูกเรียกหรือเพียงครั้งเดียว?
ครั้งเดียวเท่านั้น. เมื่อสร้าง stub แล้ว คุณจะเรียกวิธีการต่างๆ ต่อไป
เลเยอร์ Stub คือสิ่งที่นักพัฒนาส่วนใหญ่เปิดเผย และจัดเตรียมการเชื่อมโยงแบบปลอดภัยกับโมเดลข้อมูล/IDL/อินเทอร์เฟซใดก็ตามที่คุณกำลังปรับเปลี่ยน
ดังนั้นโดยพื้นฐานแล้วคุณกำลังสร้าง stub หนึ่งอันสำหรับการโต้ตอบกับบริการระยะไกลเดียว เป็นอินเทอร์เฟซฝั่งไคลเอ็นต์สำหรับการเรียกใช้บริการระยะไกล โดยทั่วไปขอแนะนำให้ใช้ Stub เดิมซ้ำสำหรับการโทรหลายครั้ง
กำหนดเวลา 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));
}