🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
在gRPC中,代理方式决定了客户端与服务端之间的通信模式。本文将详细介绍gRPC的三种主要代理方式:BlockingStub、Stub和FutureStub,并通过Java代码示例展示FutureStub的使用。
摘要: 本文详细探讨了gRPC的三种主要代理方式:BlockingStub、Stub和FutureStub,并通过Java代码示例展示了FutureStub的实际应用。
导语: 在分布式系统中,如何选择合适的通信模式是至关重要的。gRPC作为一个高性能、开源的RPC框架,为我们提供了多种代理方式。但是,这些代理方式有何不同,又该如何选择呢?
引言: “在分布式通信的大海中,代理方式就像是航向的指南针,指引我们选择最佳的通信路径。gRPC的多种代理方式为我们提供了丰富的选择,但每种方式都有其独特的应用场景。”
阻塞通信方式:当使用BlockingStub进行通信时,客户端会等待服务端的响应。在此期间,客户端线程会被阻塞,直到收到响应或发生错误。
异步通信方式:与BlockingStub不同,Stub提供了非阻塞的通信方式。客户端不会等待服务端的响应,而是通过监听器处理服务端返回的消息。
同步异步通信方式:FutureStub结合了同步和异步的特点,它基于Netty的Future进行操作。值得注意的是,FutureStub只能应用于一元RPC。
public class GrpcClient7 {
public static void main(String[] args) {
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 9000).usePlaintext().build();
try {
TestServiceGrpc.TestServiceFutureStub testServiceFutureStub = TestServiceGrpc.newFutureStub(managedChannel);
ListenableFuture<TestProto.TestResponse> responseListenableFuture = testServiceFutureStub.testSuns(TestProto.TestRequest.newBuilder().setName("xiaojren").build());
/* 同步操作
TestProto.TestResponse testResponse = responseListenableFuture.get();
System.out.println(testResponse.getResult());*/
/* responseListenableFuture.addListener(() -> {
System.out.println("异步的rpc响应 回来了....");
}, Executors.newCachedThreadPool());*/
Futures.addCallback(responseListenableFuture, new FutureCallback<TestProto.TestResponse>() {
@Override
public void onSuccess(TestProto.TestResponse result) {
System.out.println("result.getResult() = " + result.getResult());
}
@Override
public void onFailure(Throwable t) {
}
}, Executors.newCachedThreadPool());
System.out.println("后续的操作....");
managedChannel.awaitTermination(12, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
} finally {
managedChannel.shutdown();
}
}
}
通过上述代码,我们可以看到如何使用FutureStub进行异步通信,并通过ListenableFuture和回调函数处理服务端的响应。
总之,gRPC提供了多种代理方式,以满足不同的通信需求。了解这些代理方式及其特点,可以帮助我们更好地设计和实现gRPC客户端。
gRPC的代理方式为开发者提供了多种选择,但关键在于根据实际的应用场景选择最合适的方式。无论是需要即时响应的应用,还是高并发的系统,gRPC都能为我们提供稳定和高效的解决方案。
======= ·