gPRC代理方式详细介绍

简介: 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技术核心学习团队。一起探索科技的未来,共同成长。


目录
相关文章
|
算法 Unix API
指数退避(Exponential backoff)在网络请求中的应用
## 一、背景 最近做云服务 API 测试项目的过程中,发现某些时候会大批量调用 API,从而导致限流的报错。在遇到这种报错时,传统的重试策略是每隔一段时间重试一次。但由于是固定的时间重试一次,重试时又会有大量的请求在同一时刻涌入,会不断地造成限流。 这让我回想起两年前在查阅[Celery Task 文档](http://docs.celeryproject.org/en/latest
12809 1
|
前端开发 JavaScript 数据安全/隐私保护
推荐6款超级好看的开源中后台前端框架
推荐6款超级好看的开源中后台前端框架
1737 0
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
55870 0
|
缓存 JavaScript Cloud Native
阿里云发布 Spring Boot 新脚手架,真香
本文,围绕 spring initializr 框架,以 start.spring.io 为例,全面的给大家介绍如何使用和扩展这个框架,以及背后的运行原理。
56680 1
阿里云发布 Spring Boot 新脚手架,真香
|
Java Spring
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
987 1
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(1)
Spring监听器用法与原理详解(带ApplicationListener模型图)
1523 0
|
缓存 Kubernetes Java
在K8S中,如何排查与解决Pod出现OOM的问题?
在K8S中,如何排查与解决Pod出现OOM的问题?
|
开发者
如何画业务架构图
如何快速上手画业务架构图
10350 2
|
Ubuntu Linux Docker
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
18975 4
|
存储 Kubernetes 网络协议
k8s学习-StatefulSet(模板、更新、扩缩容、删除等)
k8s学习-StatefulSet(模板、更新、扩缩容、删除等)
648 0