gRPC 4种rpc定义方法与3种stub介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gRPC 4种rpc定义方法与3种stub介绍相关的知识,希望对你有一定的参考价值。

参考技术A 有关gRPC官方介绍( https://www.grpc.io/docs/what-is-grpc/introduction/ )如下:

gRPC是一个能在不同语言不同平台中进行高效通信的服务。gRPC默认使用Protocol Buffers数据格式:

Protocol Buffers以.proto作为拓展名,是一系列以name-value键值对的形式存储的数据格式。

Protocol Buffers从开源到现在已经经过很长时间,目前已经到了proto3版本,有着更加简化的语法,更加有用的特性,能够支持更多的语言。你可以从 proto3 language guide 和  reference documentation 看到更多有用的东西。另外.proto的文件格式能够从 formal specification 获取到更详细的讲解。

每个参数带有一个唯一的标识符,这些标识符被用来在message的二进制中被识别出来。不是代表每个数据的数值。

有了gRPC,我们可以在.proto文件中定义我们的服务,并用gRPC支持的任何语言生成客户端和服务器,它可以在从大型数据中心内的服务器到您自己的平板电脑的各种环境中运行,不同语言和环境之间的所有复杂通信都由gRPC为您处理。我们还获得了使用协议缓冲区的所有优点,包括高效的序列化、简单的IDL和容易的接口更新。

声明定义proto使用3版本,如果不生命默认2版本号。

在proto文件中定义java_package,指定了我们要用于生成的Java类的包。如果.proto文件中没有显式的java_package选项,那么默认情况下将使用proto包(使用“package”关键字指定)。

使用service定义服务。然后在service中使用rpc方法定义,gRPC允许使用4种不同的定义方式,定义方法。

区别在客户端调用Grpc中Stub发送请求方法时:

可以使用message定义所有的request and response types,在service中使用到的数据格式。

grpc/go 如何在 grpc.Dial 中设置 grpc.ssl_target_name_override

【中文标题】grpc/go 如何在 grpc.Dial 中设置 grpc.ssl_target_name_override【英文标题】:grpc/go how to set grpc.ssl_target_name_override in grpc.Dial 【发布时间】:2021-04-05 22:51:22 【问题描述】:

我目前正在尝试在 go 中测试 grpc 客户端和服务器之间的 ssl/tls 身份验证。不知道如何通过 grpc.ssl_target_name_override(https://grpc.github.io/grpc/core/group__grpc__arg__keys.html#ga218bf55b665134a11baf07ada5980825)

在客户端创建频道时,目前看到:

“传输:身份验证握手失败:x509:证书对 xxx.xxx.net 有效,不是 localhost”

    // Create the client TLS credentials
    creds, err := credentials.NewClientTLSFromFile("cert.pem", "")
    if err != nil 
        panic(err)
    

    conn, err := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(creds))
    if err != nil 
        panic(err)
    

我看到了其他语言的文档:https://grpc.github.io/grpc/cpp/classgrpc_1_1_channel_arguments.html#a42313e3360b50c354c68572e7bf5bccb

【问题讨论】:

【参考方案1】:

我必须在 NewClientTLSFromFile 函数中将 serverNameOverride 值设置为 xxx.xxx.net,这解决了问题。

// Create the client TLS credentials
    creds, err := credentials.NewClientTLSFromFile("cert.pem", "xxx.xxx.net")
    if err != nil 
        panic(err)
    

【讨论】:

以上是关于gRPC 4种rpc定义方法与3种stub介绍的主要内容,如果未能解决你的问题,请参考以下文章

gRPC 的 4 种基础通信模式

gRPC 流式调用

gRPC四种类型示例分析知识笔记

grpc

gRPC

Golang RPC 之 gRPC