We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在业务开发中,错误码是一个高频使用的,极其重要的,但却往往被忽略。 不做系统规划和设计的错误码会使得稍后的监控,告警,重试,业务处理都变的及其复杂,甚至做不到。
错误至少要分成这么两类
一个很重要的区别:
ServiceUnavailable 用来描述请求还没有触及到服务端业务代码时发生了错误。这个需要有具体的原因,但是业务往往不需要特殊处理,遇到了就重试即可。
ServiceInternalError 用来描述请求到了server的用户代码,但是处理过程中出现了非预期错误(比如下游非预期崩溃,自己也不能处理)
一种实现方式时,rpc client侧和server侧都引入一个err middleware pkg,比如直播用的werror code.byted.org/webcast/werror
return werror.RequestInvalid.WithCustomMessage("你这个请求不合法,因为xxx")
RequestInvalid
4001018
resp.BaseResp.Code
werror.GetErrorFromStatus(4001018)
werror.RequestInvalid.Is(err)
switch err: case werror.RequestInvalid:
error
kite error
http eerror
werror.ServiceUnavailable.WithError(err)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在业务开发中,错误码是一个高频使用的,极其重要的,但却往往被忽略。 不做系统规划和设计的错误码会使得稍后的监控,告警,重试,业务处理都变的及其复杂,甚至做不到。
rpc错误
错误至少要分成这么两类
一个很重要的区别:
ServiceUnavailable 用来描述请求还没有触及到服务端业务代码时发生了错误。这个需要有具体的原因,但是业务往往不需要特殊处理,遇到了就重试即可。
ServiceInternalError 用来描述请求到了server的用户代码,但是处理过程中出现了非预期错误(比如下游非预期崩溃,自己也不能处理)
一种实现方式时,rpc client侧和server侧都引入一个err middleware pkg,比如直播用的werror code.byted.org/webcast/werror
错误从server到client段的流程
return werror.RequestInvalid.WithCustomMessage("你这个请求不合法,因为xxx")
RequestInvalid
的唯一code,4001018
放到resp.BaseResp.Code
中werror.GetErrorFromStatus(4001018)
(本地+网络动态更新+反射)返回一个werror给调用方werror.RequestInvalid.Is(err)
来判断,也可以用switch err: case werror.RequestInvalid:
的方式来批量判断下面是非业务错误
error
(kite error
或者http eerror
) 统一使用werror.ServiceUnavailable.WithError(err)
来封装这个错误The text was updated successfully, but these errors were encountered: