El contexto de llamada incluye las propiedades de la llamada y los datos personalizados transmitidos, además de los parámetros específicos de la interfaz. Las propiedades de la llamada incluyen la dirección IP, el nombre de la aplicación que inicia la llamada y el periodo de tiempo de espera.
Especificar y recuperar el contexto de la llamada en curso
La clase com.taobao.hsf.util.RequestCtxUtil proporciona un método estático para especificar y recuperar el contexto de la llamada. Este mecanismo se basa en ThreadLocal, por lo que getxxx elimina la propiedad xxx de la variable ThreadLocal. Dicho método solo tiene efecto en una única llamada del hilo actual.
A continuación se describen los métodos utilizados para especificar y recuperar propiedades específicas.
-
Consumidores
Método
Descripción
setRequestTimeout()
Especifica el periodo de tiempo de espera para una sola llamada.
setUserId()
Especifica el ID de usuario del servicio de unidad en la llamada actual. Este método es obligatorio para las llamadas genéricas.
getProviderIp()
Recupera la dirección IP del proveedor al que se llamó por última vez.
setTargetServerIp(String ip)
Especifica la dirección IP del proveedor requerido en la siguiente llamada del hilo actual. Esta dirección IP debe estar incluida en la lista de direcciones IP de los servicios proporcionados desde memoria.
setDirectTargetServerIp(String targetIp)
Especifica la dirección IP del proveedor en la siguiente llamada del hilo actual. Este método omite el registro e ignora la lista de direcciones IP almacenada en memoria.
-
Proveedores
Método
Descripción
getClientIp()
Recupera la dirección IP de quien realiza la llamada.
getAppNameOfClient()
Recupera el nombre de la aplicación que utiliza quien realiza la llamada.
isHttpRequest()
Indica si la llamada es una llamada HTTP.
getHttpHeader(String key)
Recupera la propiedad de encabezado de la solicitud HTTP.
Transmitir el contexto de solicitud personalizado
RpcContext ofrece un método para transmitir datos adicionales al proveedor sin modificar la interfaz. El tipo de parámetro puede ser un objeto de dominio (DO) personalizado o un tipo básico. Asegúrese de que el extremo remoto pueda serializar parámetros del mismo tipo.
-
Especifique el contexto antes de que el consumidor inicie una llamada.
//setup context before rpc call RPCContext rpcContext = RPCContext.getClientContext(); rpcContext.putAttachment("tetantId", "123"); //This is an RPC call. The call context is also transmitted to the peer end. orderService.queryOrder(1L); -
Recupere el contexto mediante los métodos del proveedor.
//get context data RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");