Çağrı bağlamı; arayüze özel parametreler dışındaki çağrı özelliklerini ve iletilen özel verileri içerir. Çağrı özellikleri arasında IP adresi, çağrıyı başlatan uygulamanın adı ve zaman aşımı süresi bulunur.
Devam eden çağrı bağlamını belirtme ve alma
com.taobao.hsf.util.RequestCtxUtil sınıfı, çağrı bağlamını belirtmek ve almak için statik bir yöntem sunar. ThreadLocal tabanlı olan getxxx yöntemi, xxx özelliğini ThreadLocal değişkeninden kaldırır. Bu yöntem yalnızca geçerli iş parçacığının tek bir çağrısı için geçerlidir.
Aşağıdaki tabloda belirli özellikleri belirtmek ve almak için kullanılan yöntemler açıklanmaktadır.
-
Tüketiciler
Yöntem Açıklama setRequestTimeout() Tek bir çağrı için zaman aşımı süresini belirtir. setUserId() Geçerli çağrıdaki birim hizmetinin kullanıcı ID değerini belirtir. Bu yöntem genel çağrılar için gereklidir. getProviderIp() En son çağrılan sağlayıcının IP adresini alır. setTargetServerIp(String ip) Geçerli iş parçacığının sonraki çağrısında gerekli sağlayıcının IP adresini belirtir. Bu IP adresi, bellekte sağlanan hizmetlerin IP adresi listesinde yer almalıdır. setDirectTargetServerIp(String targetIp) Geçerli iş parçacığının sonraki çağrısında sağlayıcının IP adresini belirtir. Bu yöntem kayıt defterini atlar ve bellekteki IP adresi listesini yok sayar. -
Sağlayıcılar
Yöntem Açıklama getClientIp() Arayanın IP adresini alır. getAppNameOfClient() Arayan tarafından kullanılan uygulamanın adını alır. isHttpRequest() Çağrının bir HTTP çağrısı olup olmadığını belirtir. getHttpHeader(String key) HTTP isteğinin başlık özelliğini alır.
Özel istek bağlamını iletme
RpcContext, arayüzde değişiklik yapmadan ek verileri sağlayıcıya iletmek için bir yöntem sunar. Parametre türü özel etki alanı nesnesi (DO) türü veya temel bir tür olabilir. Eş uçtaki sistemin aynı türdeki parametreleri serileştirebildiğinden emin olun.
-
Tüketici bir çağrı başlatmadan önce bağlamı belirtin.
//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); -
Sağlayıcının yöntemlerini kullanarak bağlamı alın.
//get context data RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");