func()

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
}