in proxy/protocol/dubbo/client/chassis/dubbo_chassis_client.go [71:109]
func (c *dubboChassisClient) Call(ctx context.Context, addr string, inv *invocation.Invocation, rsp interface{}) error {
resp := rsp.(*dubboClient.WrapResponse)
resp.Resp = &dubbo.DubboRsp{}
dubboReq := inv.Args.(*dubbo.Request)
endPoint := addr
if endPoint == dubboproxy.DubboListenAddr {
endPoint = os.Getenv(mesherCommon.EnvSpecificAddr)
}
if endPoint == "" {
resp.Resp.DubboRPCResult.SetException("The endpoint is empty")
return &util.BaseError{"The endpoint is empty"}
}
dubboCli, err := dubboClient.CachedClients.GetClient(endPoint, c.opts.Timeout)
if err != nil {
resp.Resp.DubboRPCResult.SetException(fmt.Sprintf("Invalid Request addr %s %s", endPoint, err))
openlog.Error(fmt.Sprintf("Invalid Request addr %s %s", endPoint, err))
return err
}
dubboRsp, err := dubboCli.Send(dubboReq)
if err != nil {
resp.Resp.DubboRPCResult.SetException(fmt.Sprintf("Dubbo server exception: " + err.Error()))
openlog.Error("Dubbo server exception: " + err.Error())
return err
}
resp.Resp = dubboRsp
if dubboRsp == nil {
return nil
}
if dubboRsp.GetStatus() != dubbo.Ok {
return fmt.Errorf("Dubbo request error %s", dubboRsp.GetErrorMsg())
}
return nil
}