O contexto de chamada inclui propriedades da chamada e dados personalizados transmitidos, além dos parâmetros específicos da interface. As propriedades da chamada abrangem o endereço IP, o nome do aplicativo que inicia a chamada e o tempo limite.
Especifique e recupere o contexto de chamada em andamento
A classe com.taobao.hsf.util.RequestCtxUtil oferece um método estático para especificar e recuperar o contexto de chamada. Com base em ThreadLocal, os métodos getxxx removem a propriedade xxx da variável ThreadLocal. Esse método tem efeito apenas para uma única chamada da thread atual.
A tabela a seguir descreve os métodos usados para especificar e recuperar propriedades específicas.
-
Consumidores
Método
Descrição
setRequestTimeout()
Define o tempo limite para uma única chamada.
setUserId()
Especifica o ID do usuário do serviço de unidade na chamada atual. Este método é obrigatório para chamadas genéricas.
getProviderIp()
Recupera o endereço IP do provedor chamado mais recentemente.
setTargetServerIp(String ip)
Determina o endereço IP do provedor desejado na próxima chamada da thread atual. Esse endereço IP deve constar na lista de endereços IP dos serviços fornecidos por memória.
setDirectTargetServerIp(String targetIp)
Indica o endereço IP do provedor na próxima chamada da thread atual. Este método ignora o registro e a lista de endereços IP na memória.
-
Provedores
Método
Descrição
getClientIp()
Obtém o endereço IP do chamador.
getAppNameOfClient()
Retorna o nome do aplicativo utilizado pelo chamador.
isHttpRequest()
Verifica se a chamada é uma solicitação HTTP.
getHttpHeader(String key)
Recupera a propriedade de cabeçalho da solicitação HTTP.
Transmita o contexto de solicitação personalizado
O RpcContext disponibiliza um método para transmitir dados adicionais ao provedor sem modificar a interface. O tipo de parâmetro pode ser um objeto de domínio personalizado (DO) ou um tipo básico. Certifique-se de que a extremidade remota consiga serializar parâmetros do mesmo tipo.
-
Defina o contexto antes de o consumidor iniciar a chamada.
//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 o contexto utilizando os métodos do provedor.
//get context data RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");