gPRC代理方式详细介绍

在这里插入图片描述

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

在这里插入图片描述

gPRC代理方式

在gRPC中,代理方式决定了客户端与服务端之间的通信模式。本文将详细介绍gRPC的三种主要代理方式:BlockingStub、Stub和FutureStub,并通过Java代码示例展示FutureStub的使用。

摘要
本文详细探讨了gRPC的三种主要代理方式:BlockingStub、Stub和FutureStub,并通过Java代码示例展示了FutureStub的实际应用。

导语
在分布式系统中,如何选择合适的通信模式是至关重要的。gRPC作为一个高性能、开源的RPC框架,为我们提供了多种代理方式。但是,这些代理方式有何不同,又该如何选择呢?

引言
“在分布式通信的大海中,代理方式就像是航向的指南针,指引我们选择最佳的通信路径。gRPC的多种代理方式为我们提供了丰富的选择,但每种方式都有其独特的应用场景。”

1. BlockingStub

阻塞通信方式:当使用BlockingStub进行通信时,客户端会等待服务端的响应。在此期间,客户端线程会被阻塞,直到收到响应或发生错误。

2. Stub

异步通信方式:与BlockingStub不同,Stub提供了非阻塞的通信方式。客户端不会等待服务端的响应,而是通过监听器处理服务端返回的消息。

3. FutureStub

同步异步通信方式:FutureStub结合了同步和异步的特点,它基于Netty的Future进行操作。值得注意的是,FutureStub只能应用于一元RPC。

FutureStub代码示例:

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客户端。

几种代理方式对比

  • BlockingStub:这是一个阻塞通信方式,客户端在等待服务端响应时会被阻塞。适用于需要即时响应的场景。

  • Stub:提供了异步通信方式,客户端不会被阻塞,而是通过监听器处理返回的消息。适用于高并发、高响应的场景。

  • FutureStub:结合了同步和异步的特点,基于Netty的Future进行操作。尽管它提供了异步的能力,但只能应用于一元RPC。

总结

gRPC的代理方式为开发者提供了多种选择,但关键在于根据实际的应用场景选择最合适的方式。无论是需要即时响应的应用,还是高并发的系统,gRPC都能为我们提供稳定和高效的解决方案。

参考资料

  1. gRpc官方文档:https://grpc.io/docs/
  2. “Practical gRPC” by Joshua Humphries, David Konsumer, David Muto, and Robert Ross.
  3. “gRPC Up and Running” by Kasun Indrasiri and Danesh Kuruppu.

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

学习复习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫头虎

一分也是爱,打赏博主成就未来!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值