Le contexte d'appel comprend les propriétés d'appel et les données personnalisées transmises, à l'exclusion des paramètres spécifiques à l'interface. Les propriétés d'appel incluent l'adresse IP, le nom de l'application qui initie l'appel et le délai d'expiration.
Spécifier et récupérer le contexte d'appel en cours
La classe com.taobao.hsf.util.RequestCtxUtil fournit une méthode statique pour spécifier et récupérer le contexte d'appel. Basée sur ThreadLocal, la méthode getxxx supprime la propriété xxx de la variable ThreadLocal. Cette méthode n'est effective que pour un seul appel du thread actuel.
Le tableau suivant décrit les méthodes utilisées pour spécifier et récupérer des propriétés spécifiques.
-
Consommateurs
Méthode Description setRequestTimeout() Spécifie le délai d'expiration pour un seul appel. setUserId() Spécifie l'ID utilisateur du service d'unité dans l'appel actuel. Cette méthode est requise pour les appels génériques. getProviderIp() Récupère l'adresse IP du dernier fournisseur appelé. setTargetServerIp(String ip) Spécifie l'adresse IP du fournisseur requis lors du prochain appel du thread actuel. Cette adresse IP doit figurer dans la liste des adresses IP des services fournis en mémoire. setDirectTargetServerIp(String targetIp) Spécifie l'adresse IP du fournisseur lors du prochain appel du thread actuel. Cette méthode contourne le registre et ignore la liste des adresses IP en mémoire. -
Fournisseurs
Méthode Description getClientIp() Récupère l'adresse IP de l'appelant. getAppNameOfClient() Récupère le nom de l'application utilisée par l'appelant. isHttpRequest() Indique si l'appel est un appel HTTP. getHttpHeader(String key) Récupère la propriété d'en-tête de la requête HTTP.
Transmettre le contexte de requête personnalisé
RpcContext fournit une méthode pour transmettre des données supplémentaires au fournisseur sans modifier l'interface. Le type de paramètre peut être un objet de domaine personnalisé (DO) ou un type primitif. Assurez-vous que l'extrémité distante peut sérialiser les paramètres du même type.
-
Spécifiez le contexte avant que le consommateur n'initie un appel.
//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); -
Récupérez le contexte en utilisant les méthodes du fournisseur.
//get context data RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");