gRPC简介

gRPC是一种进程间通信技术,用于构建分布式应用程序。它使用接口定义语言(IDL)定义服务接口,生成服务器端和客户端代码。在gRPC中,请求通过HTTP/2以protocol buffers格式发送。本文涵盖gRPC的开发案例,包括定义服务接口、开发服务端和消费端,以及介绍一元RPC、服务端流、客户端流和双向流四种消息流模式。然而,gRPC的契约驱动特性可能限制对外服务的灵活性,并带来复杂的开发流程。
摘要由CSDN通过智能技术生成

Grpc简介

  1. gRPC是一项进程间通信技术,可以用来连接、调用、操作和调试分布式异构应用程序。

  2. 在开发gRPC应用程序时,先要定义服务接口,其中应包含

    • 消费者消费服务的方式

    • 消费者能够远程调用的方法

    • 调用这些方法所使用的参数和消息格式等

  3. 在服务定义中所使用的语言叫作接口定义语言(interface definition language,IDL)。服务定义

    • 可以生成服务器端代码,也就是服务器端骨架,它通过提供低层级的通信抽象简化了服务器端的逻辑。
    • 可以生成客户端代码,也就是客户端存根,它使用抽象简化了客户端的通信,为不同的编程语言隐藏了低层级的通信
  4. 基于gPRC的生产者和消费者
    在这里插入图片描述

  5. 当调用gRPC服务时,客户端的gRPC库会使用protocol buffers,并将RPC的请求编排(marshal)为protocol buffers格式,然后将其通过HTTP/2进行发送。在服务器端,请求会被解排(unmarshal),对应的过程调用会使用protocol buffers来执行。

  6. gPRC劣势

    • 不太适合面向外部的服务。gRPC服务具有契约驱动、强类型的特点,会限制向外部暴露的服务的灵活性,同时消费者的控制权会削弱很多
    • 巨大的服务定义变更是复杂的开发流程。如果出现巨大的gRPC服务定义变更,通常需要重新生成客户端代码和服务器端代码。
    • gRPC生态系统相对较小

开发案例

定义服务接口

  1. 创建接口模块grpc-demo:grpc-apigrpc的版本一定要与protobuf匹配

    apply plugin: "io.spring.dependency-management"
    dependencyManagement {
         
        imports {
         
            mavenBom "io.grpc:grpc-bom:1.43.0"
        }
    }
    //==============protobuf配置================
    
    sourceSets {
         
        main {
         
            proto {
         
                srcDir 'src/main/proto'
            }
    
        }
        test {
         
            proto {
         
                srcDir 'src/test/proto'
            }
        }
    
    }
    
    protobuf {
         
        protoc {
         
            //从仓库下载
            artifact = 'com.google.protobuf:protoc:3.19.1'
            //生成代码的目录
            generatedFilesBaseDir = "$projectDir/src/"
            plugins {
         
                grpc {
         
                    artifact = "io.grpc:protoc-gen-grpc-java:1.43.0"
                }
            }
    
            generateProtoTasks {
         
                //protobuf源码输出目录
                all().each {
          task ->
                    task.builtins {
         
                        java {
         
                            outputSubDir = 'grpc'
                        }
                    }
                }
                //grpc源码输出目录
                all()*.plugins {
         
                    grpc {
         
                        outputSubDir = 'grpc'
                    }
                }
    
            }
        }
    }
    
    //==============protobuf配置================
    
    
    //在build之前执行proto代码生成
    build.dependsOn(":grpc-demo:grpc-api:generateProto")
    
    clean {
         
        delete protobuf.generatedFilesBaseDir + "/main/grpc"
    }
    
    dependencies {
         
        compile 'com.google.protobuf:protobuf-java-util:3.19.1'
        compile 'com.google.protobuf:protobuf-java:3.19.1'
        compile 'io.grpc:grpc-stub'
        compile 'io.grpc:grpc-protobuf'
    }
    
    
  2. 使用Protocol

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: RPC(Remote Procedure Call)和 gRPC 是两种不同的远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务的协议,它可以实现不同节点之间的通信。而gRPC是一种基于RPC协议的框架,它使用了Google开发的Protocol Buffers作为序列化和协议编解码器,以及HTTP/2作为网络传输协议。\[1\]\[2\]\[3\] 区别在于,gRPC相比传统的RPC框架具有以下特点: 1. 序列化和协议编解码器:gRPC使用Protocol Buffers作为默认的序列化和协议编解码器,它可以高效地序列化和传输数据。 2. 网络传输协议:gRPC使用HTTP/2作为网络传输协议,可以提供更高的性能和更低的延迟。 3. 多语言支持:gRPC支持多种编程语言,包括C++、Java、Python等,可以方便地在不同的语言之间进行通信。 4. 异步支持:gRPC支持异步调用,可以提高系统的并发性能。 5. 服务定义:gRPC使用Protocol Buffers定义服务接口和消息类型,可以自动生成客户端和服务端的代码,简化开发过程。 总之,gRPC是一种基于RPC协议的框架,通过使用Protocol Buffers和HTTP/2等技术,提供了更高效、更灵活的远程过程调用方式。 #### 引用[.reference_title] - *1* *2* *3* [Rpc 和 gRpc 简介汇总](https://blog.csdn.net/Jailman/article/details/126056469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值