Kitex 框架定义在 github.com/cloudwego/kitex/pkg/kerrors
下
ErrInternalException
, 框架内部发生的错误,具体包括以下几种:
ErrNotSupported
, "operation not supported"
,进行了尚不支持的操作ErrNoResolver
, "no resolver available"
,没有可用的 resolverErrNoDestService
, "no dest service"
,没有指定目标 serviceErrNoDestAddress
, "no dest address"
,没有指定目标地址ErrNoConnection
, "no connection available"
,当前没有可用连接ErrNoIvkRequest
, "invoker request not set"
,invoker 模式下调用时为设置 requestErrServiceDiscovery
, 服务发现错误,具体错误见报错信息
ErrGetConnection
, 获取连接错误,具体错误见报错信息
ErrLoadbalance
, 负载均衡错误
ErrNoMoreInstance
, 没有可供重试的示例,上一次调用的错误见报错信息
ErrRPCTimeout
, RPC 调用超时,具体错误见报错信息
ErrACL
, 调用被拒绝,具体错误见报错信息
ErrCircuitBreak
, 发生熔断后请求被拒绝,通常包含两种错误:
ErrServiceCircuitBreak
, "service circuitbreak"
,发生服务级别熔断后请求被拒绝ErrInstanceCircuitBreak
, "instance circuitbreak"
,发生实例级别熔断后请求被拒绝ErrRemoteOrNetwork
, 远端服务发生错误,或者出现网络错误。具体错误见报错信息
当带有[remote]
字样时,代表此错误为远端返回
ErrOverlimit
, 过载保护错误。通常包括以下两种错误:
ErrConnOverLimit
, "too many connections"
,连接过载,建立的连接超过限制ErrQPSOverLimit
, "request too frequent"
,请求过载,请求数超过限制ErrPanic
, 服务发生 panic 。
当带有[happened in biz handler]
字样时,代表 panic 发生在服务端 handler 中,此时错误信息中会带上堆栈。
ErrBiz
, 服务端 handler 返回的错误。
ErrRetry
, 重试时发生错误,具体错误见报错信息。
该类别对应 Thrift 框架原生的 Application Exception 错误,通常,这些错误会被 Kitex 框架包装成 remote or network error
。
错误码 | 名称 | 含义 |
---|---|---|
0 | UnknownApplicationException | 未知错误 |
1 | UnknownMethod | 未知方法 |
2 | InValidMessageTypeException | 无效的消息类型 |
3 | WrongMethodName | 错误的方法名字 |
4 | BadSequenceID | 错误的包序号 |
5 | MissingResult | 返回结果缺失 |
6 | InternalError | 内部错误 |
7 | ProtocolError | 协议错误 |
可以通过 kerrors
包提供的 IsKitexError
直接进行判断
import "github.com/cloudwego/kitex/pkg/kerrors"
...
isKitexErr := kerrors.IsKitexError(kerrors.ErrInternalException) // 返回 true
可以通过 errors.Is
进行判断,其中详细错误可以通过详细错误判断,如:
import "errors"
import "github.com/cloudwego/kitex/client"
import "github.com/cloudwego/kitex/pkg/kerrors"
...
_, err := echo.NewClient("echo", client.WithResolver(nil)) // 返回 kerrors.ErrNoResolver
...
isKitexErr := errors.Is(err, kerrors.ErrNoResolver) // 返回 true
也可以通过基本错误进行判断,如:
import "errors"
import "github.com/cloudwego/kitex/client"
import "github.com/cloudwego/kitex/pkg/kerrors"
...
_, err := echo.NewClient("echo", client.WithResolver(nil)) // 返回 kerrors.ErrNoResolver
...
isKitexErr := errors.Is(err, kerrors.ErrInternalException) // 返回 true
特别的,timeout
错误可以通过 kerrors
包提供的 IsTimeoutError
进行判断
kerrors
中所有的具体错误类型都是 kerrors
包下的 DetailedError
,故而可以通过 errors.As
获取到实际的 DetailedError
,如:
import "errors"
import "github.com/cloudwego/kitex/client"
import "github.com/cloudwego/kitex/pkg/kerrors"
...
_, err := echo.NewClient("echo", client.WithResolver(nil)) // 返回 kerrors.ErrNoResolver
...
var de *kerrors.DetailedError
ok := errors.As(err, &ke) // 返回 true
if de.ErrorType() == kerrors.ErrInternalException {} // 返回 true
DetailedError
提供了下述方法用于获取更详细的信息:
ErrorType() error
,用于获取基本错误类型Stack() string
,用于获取堆栈信息(目前仅 ErrPanic
会带上)