package rpc import ( "github.com/TeaOSLab/EdgeDNS/internal/configs" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "strings" "sync" ) var sharedRPC *RPCClient = nil var locker = &sync.Mutex{} // SharedRPC 获取当前的RPC客户端 func SharedRPC() (*RPCClient, error) { locker.Lock() defer locker.Unlock() if sharedRPC != nil { return sharedRPC, nil } config, err := configs.SharedAPIConfig() if err != nil { return nil, err } client, err := NewRPCClient(config) if err != nil { return nil, err } sharedRPC = client return sharedRPC, nil } // IsConnError 是否为连接错误 func IsConnError(err error) bool { if err == nil { return false } // 检查是否为连接错误 statusErr, ok := status.FromError(err) if ok { var errorCode = statusErr.Code() return errorCode == codes.Unavailable || errorCode == codes.Canceled } var keywords = []string{ "rpc error: code = Unavailable", "rpc error: code = Canceled", } for _, keyword := range keywords { if strings.Contains(err.Error(), keyword) { return true } } return false }