首页
学习
活动
专区
圈层
工具
发布

gRPC: 如何设计 RPC 错误码?

为了能让 API 使用者对于 API 的错误有一个清晰的视图,定义一个标准的 RPC 错误类型是非常重要的事情。 考虑范围 一个合理的 RPC 错误,需要考虑如下几个方面。...包含错误码,错误信息 错误信息可扩展 考虑可读性 可解析性,即,用户可通过代码解析错误码,并采取有效行为 避免内部错误益处,例如,Nil point error RPC 错误码结构 [up-3233efc7329c9e7d30d375dd6363d5bc459...发送请求 我们可以看到,针对于 grpc-gateway 的请求,rk-boot 把 GRPC 的错误,映射成了 400 错误。...GRPC 的错误,映射成了 500 错误。...GRPC 对应 grpc-gateway 错误映射 可参考:https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto

2.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    聊聊gRPC的特性和背后设计的原则(一)

    的,因为protocol buffer的特殊性,所以gRPC框架是跨语言的通信框架(与编程语言无关性),也就是说用Java开发的基于gRPC的服务,可以用GoLang编程语言调用 gRPC同时支持同步调用和异步调用...,同步RPC调用时会一直阻塞直到服务端处理完成返回结果, 异步RPC是客户端调用服务端时不等待服务段处理完成返回,而是服务端处理完成后主动回调客户端告诉客户端处理完成 gRPC是基于http2协议实现的...已经为命名解析和负载均衡提供了接口 基于http2协议的特性:gRPC允许定义如下四类服务方法 单项RPC:客户端发送一次请求,等待服务端响应结构,会话结束,就像一次普通的函数调用这样简单 服务端流式RPC...,所以协议应允许可插拔机制,还有负载均衡,服务发现,日志,监控等都支持可插拔机制 阻塞和非阻塞:支持客户端和服务器交换的消息序列的异步和同步处理。...标准化状态码 - 客户端通常以有限的方式响应API调用返回的错误。应约束状态码名称空间,以使这些错误处理决策更加清晰。如果需要更丰富的特定领域的状态,则可以使用元数据交换机制来提供该状态。

    3.7K20

    服务端测试实战之RPC协议(三)

    在服务端测试实战之RPC协议(二)中详细了介绍了gRPC协议的通信,以及针对Python编程语言怎么使用来进行测试。...其实在gRPC协议中,针对这种流式的请求在编程模式中更多实用的是异步编程,同步编程方式很难复合流式的诉求,比如N次请求N次回应,这中间本身就是一个持续的过程,而同步交互更多简单粗暴的就是请求了得尽快拿到回应数据...既然是异步,也就是离不开协程,而协程本身在计算机的层面是不存在的,计算机里面更多的是进程和线程,而协程更多是用户行为控制的一种线程,它的优势是遇到IO就切换,这很符合异步的交互。...下面通过具体的案例来说明gRPC的协议中四种模式,如helloworld.proto的文件为: syntax = "proto3"; service Greeter { rpc SayHello(HelloRequest...) returns (HelloReply) {} rpc Register (stream RegisterRequest) returns (RegisterReply) {} rpc Login

    61940

    gPRC代理方式详细介绍

    gRPC作为一个高性能、开源的RPC框架,为我们提供了多种代理方式。但是,这些代理方式有何不同,又该如何选择呢?...在此期间,客户端线程会被阻塞,直到收到响应或发生错误。 2. Stub 异步通信方式:与BlockingStub不同,Stub提供了非阻塞的通信方式。...FutureStub 同步异步通信方式:FutureStub结合了同步和异步的特点,它基于Netty的Future进行操作。值得注意的是,FutureStub只能应用于一元RPC。...总之,gRPC提供了多种代理方式,以满足不同的通信需求。了解这些代理方式及其特点,可以帮助我们更好地设计和实现gRPC客户端。...尽管它提供了异步的能力,但只能应用于一元RPC。 总结: gRPC的代理方式为开发者提供了多种选择,但关键在于根据实际的应用场景选择最合适的方式。

    34910

    gRPC 基础概念详解

    协议传输,本文介绍 gRPC 的基础概念,首先通过关系图直观展示这些基础概念之间关联,介绍异步 gRPC 的 Server 和 Client 的逻辑;然后介绍 RPC 的类型,阅读和抓包分析 gRPC...一个 RPC 可能对应多种 API,比如同步的、异步的、回调的。...二、异步相关概念 不管是 Client 还是 Server,异步 gRPC 都是利用 CompletionQueue API 进行异步操作。...关系图 将上边的异步 Client 和异步 Server 的逻辑通过关系图进行展示。右侧 RPC 为创建的对象中的内存容,左侧使用相同颜色的小块进行代替。...async-client 以下 CallData 并非 gRPC 中的概念,而是异步 Server 在实现过程中为了方便进行的封装,其中的 Status 也是在异步调用过程中自定义的、用于转移的状态。

    4.6K50

    手把手教你快速理解gRPC!

    首先通过关系图直观展示这些基础概念之间关联,介绍异步gRPC的Server和Client的逻辑;然后介绍RPC的类型,阅读和抓包分析gRPC的通信协议,gRPC上下文;最后分析grpc.pb.h文件的内容...一个RPC可能对应多种API,比如同步的、异步的、回调的。...二、异步相关概念 不管是Client还是Server,异步gRPC都是利用CompletionQueue API进行异步操作。...(三)关系图 将上边的异步Client和异步Server的逻辑通过关系图进行展示。右侧RPC为创建的对象中的内存容,左侧使用相同颜色的小块进行代替。...以下CallData并非gRPC中的概念,而是异步Server在实现过程中为了方便进行的封装,其中的Status也是在异步调用过程中自定义的、用于转移的状态。

    2.3K61

    gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

    同样,gRPC 保证单个 RPC 中的消息排序 叫。 双向流式处理 RPC,其中双方发送一系列消息 使用读写流。...同步与异步 在响应从服务器到达之前阻止的同步 RPC 调用是 最接近过程调用 RPC 的抽象 渴望。...另一方面,网络本质上是异步的,并且在许多 能够在不阻塞当前的情况下启动 RPC 非常有用的方案 线。 大多数语言的 gRPC 编程 API 都有同步和 异步风格。...RPC 生命周期 在本部分中,你将详细了解 gRPC 客户端发生的情况 调用 gRPC 服务器方法。有关完整的实现详细信息,请参阅 特定于语言的页面。...截止时间/超时 gRPC 允许客户端指定他们愿意等待 RPC 的时间 在 RPC 因错误而终止之前完成。上 服务器端,服务器可以查询查看特定 RPC 是否已超时, 或完成 RPC 还剩多少时间。

    1.1K40

    远程过程调用系统gRPC

    和其他RPC一样,基于服务定义的思想,结合Protocol buffers+gRPC 插件,定义好服务后,服务端实现相应接口,客户端直接调用生成好的方法即可 主要使用场景 低延迟、高度可扩展的分布式系统...GetFeature(Point) returns (Feature) {} 流式rpc 解决的问题 传输的数据太大,造成瞬时网络压力 大数据需要接收完才能处理 分类 服务端流式rpc rpc...,不用等到读取完才响应,可以接收一点,响应一点,官网的原话是:服务器和客户端可以玩“乒乓” 具体介绍看官方文档,现在没用到这块 同步和异步 在 gRPC-Go 中,RPC 以阻塞/同步模式运行,这意味着...RPC 调用等待服务器响应,并且将返回响应或错误。...conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err !

    73330

    TiKV 源码解析系列文章(八)grpc-rs 的封装与实现

    grpc_channel 在 RPC 里就是底层的连接,grpc_completion_queue 就是一个处理完成事件的队列。grpc_call 代表的是一个 RPC。...要进行一次 RPC,首先从 grpc_channel 创建一个 grpc_call,然后再给这个 grpc_call 发送请求,收取响应。...而这个过程都是异步,所以需要调用 grpc_completion_queue 的接口去驱动消息处理。整个过程可以通过以下代码来解释(为了让代码更可读一些,以下代码和实际可编译运行的代码有一些出入)。...可以看到这里对于 Unary 和 ServerStreaming 返回了错误。这是因为这两种请求都是客户端只发一次请求,所以返回错误让 resolve 继续拉取消息体然后再执行对应的方法。...而 client 在调用 RPC 时,其实都是创建了一个 Call,并产生相应的 BatchPromise 来异步通知 RPC 方法是否已经完成。

    1.1K41

    gRPC 初探与简单使用

    与许多 RPC 系统一样,gRPC 围绕定义服务的思想,指定可通过其参数和返回类型远程调用的方法。...gRPC 可以定义四种服务方法: 1. 一元 RPC,客户端向服务器发送单个请求并获得单个响应,就像普通函数调用一样。...同步与异步 阻塞的同步 RPC 调用直到从服务器收到响应为止是最接近 RPC 所追求的过程调用抽象的近似方法。另一方面,网络本质上是异步的,因此在许多情况下能够启动 RPC 而不阻塞当前线程很有用。...截止时间 / 超时 gRPC 允许客户端指定在 RPC 因 DEADLINE_EXCEEDED 错误终止之前,他们愿意等待 RPC 完成多长时间。...RPC 终止 在 gRPC 中,客户端和服务器均对呼叫成功进行独立和本地确定,其结论可能不匹配。这意味着,例如,您可能拥有一个在服务器端成功完成 RPC 的RPC(“我已经发送了所有响应!”)

    2.6K20

    C++中gRPC:从小白入门到大神精通

    gRPC作为一个高性能、开源的远程过程调用(RPC)框架,在C++开发领域中扮演着重要角色。无论是开发微服务架构,还是构建大规模分布式系统,掌握gRPC都能让你的开发工作事半功倍。...接下来,让我们一起开启从gRPC小白到大神的学习之旅。二、gRPC入门基础2.1 什么是gRPCgRPC是Google开源的一款RPC框架,基于HTTP/2协议,使用Protobuf作为接口定义语言。...3.2 gRPC的通信模式gRPC支持四种通信模式:一元RPC:客户端发送一个请求,服务端返回一个响应,就像我们前面的“Hello World”示例。...拦截器(Interceptor)则是gRPC提供的一种强大的机制,允许开发者在RPC调用的生命周期中插入自定义逻辑,如日志记录、认证校验、错误处理等。...异步调用:使用gRPC的异步API,在等待RPC响应时可以继续执行其他任务,提高程序的并发性能。

    2.5K11

    GO实现高可用高并发分布式系统:使用gRPC实现一对多和多对多交互

    在gRPC中,可以连续发送多条数据的对象叫stream,该对象支持异步发送,假设客户端要查询所有订单号大于10的交易记录,假设在服务端存储了满足条件的记录有20条,那么服务端可以先返回5条,等5分钟后再返回...10条,然后等20分钟后再返回5条,因此客户端在接收记录时需要做相应的异步处理。...这里需要注意的是,客户端在接收数据过程中可能由于多种原因中断连接,这时服务端调用Send就会返回错误,同时还需要注意的是当服务端发送完所有数据后,一定要return nil,这样gRPC才会把发送管道给关闭调...updateRes) 客户端先是构造一系列Order数据然后分别调用多次Send传递给服务端,如果客户端没有多余数据要传输后,它调用CloseAndRecv(),这个函数会让服务端的Recv()返回io.EOF错误...,所有上面代码在主函数main里通过Send发送请求,然后扔出一个goroutine异步接收服务端发送回来的数据,虽然发送和接收同时进行但客户端不用加锁,也就是gRPC框架保证了发送和接收在异步情况下业务逻辑依然不会出错

    1.6K10

    后端接口除了 HTTP,还有什么?

    一次讲清 RPC、Dubbo、gRPC、消息队列、GraphQL、WebSocket 的技术分享 在很多团队中,当我们讨论“接口”时,大家默认想到的几乎是 RESTful 的 HTTP + JSON。...全文结构 接口类型全景图 RPC(gRPC、Dubbo、Thrift)详解 消息队列(Kafka、RabbitMQ…)详解 GraphQL 与 REST 的对比 WebSocket/MQTT 等实时接口...1️⃣ RPC:真正的“函数级”远程调用 包括:gRPC、Dubbo、Thrift、Hessian 等 RPC 的思想很简单: 就像调用本地函数一样去调用远程服务。...6️⃣ 各类接口 vs HTTP 接口的核心对比 指标 HTTP/REST RPC(gRPC/Dubbo) 消息队列 WebSocket 模型 请求-响应 请求-响应 异步消息 双向通信 协议 HTTP...一句话总结: 外部用 HTTP,内部用 RPC,异步用 MQ,实时用 WebSocket。

    17210

    【连载 58】gRPC 协议性能测试基础

    常见的RPC协议包括XML-RPC、JSON-RPC、Java RMI以及gRPC。其中,gRPC凭借高性能、跨语言支持和灵活的调用方式,成为微服务架构和云原生应用的首选框架。...• 多样化调用方式:支持简单RPC、服务器流式RPC、客户端流式RPC和双向流式RPC,满足不同业务场景需求。例如,双向流式RPC适用于实时通信场景,如聊天应用或实时数据传输。...8.1 gRPC协议基础 在 gRPC 性能测试中,简单 RPC 调用(Unary RPC) 是最常见、最基础的通信方式,客户端发送一次请求,服务端返回一次响应,类似于传统的 HTTP 请求响应模型。...• 非阻塞客户端(异步客户端):客户端发送请求后无需等待响应,可继续发起其他请求,适合高并发场景。例如,在压力测试中,异步调用能模拟大量用户同时下单的场景。...在实际工作中,建议从简单场景入手,逐步深入异步和流式调用,积累经验后挑战更复杂的性能测试场景。

    43210

    gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?

    对于内网环境,自行实现的RPC协议相较于gRPC协议具有以下优势。1)灵活性:根据业务需求和技术栈定制协议特性,如支持特定的调用模式、元数据传递、流控策略等。...这是RPC框架(包括HTTP/2的DATA帧内的消息和gRPC的消息封装)最常用的方式,因为它精确、高效且适用于任何类型的数据。...如上实现一个简单的数据接收和解析功能,但这样不足以完整描述一个RPC协议。以gRPC为例,一次Request请求包括请求头,请求体和EOS。...因为帧头是固定长度,一旦对帧头增加新的功能,将会导致协议解析失败引发线上故障。为了能够平滑地升级改造前后的协议,有必要设计一种支持可扩展的协议。...7)消息ID(Request ID):4字节,唯一标识一次RPC调用,用于异步请求响应的匹配。 8)预留字段(Reserved):4字节,预留字段,用于未来协议扩展,增加兼容性。

    27210
    领券