Konteks panggilan mencakup properti panggilan dan data khusus yang ditransmisikan selain parameter spesifik antarmuka. Properti panggilan meliputi alamat IP, nama aplikasi yang memulai panggilan, serta periode timeout.
Tentukan dan ambil konteks panggilan berkelanjutan
com.taobao.hsf.util.RequestCtxUtil menyediakan metode statis untuk menentukan dan mengambil konteks panggilan. Berdasarkan ThreadLocal, metode getxxx menghapus properti xxx dari variabel ThreadLocal. Metode ini hanya berlaku untuk satu panggilan tunggal dari thread saat ini.
Tabel berikut menjelaskan metode yang digunakan untuk menentukan dan mengambil properti tertentu.
- Konsumen
Metode Deskripsi setRequestTimeout() Menentukan periode timeout untuk satu panggilan tunggal. setUserId() Menentukan ID pengguna layanan unit dalam panggilan saat ini. Metode ini diperlukan untuk panggilan generik. getProviderIp() Mengambil alamat IP penyedia yang terakhir dipanggil. setTargetServerIp(String ip) Menentukan alamat IP penyedia yang diperlukan dalam panggilan berikutnya dari thread saat ini. Alamat IP ini harus disertakan dalam daftar alamat IP untuk layanan yang disediakan di memori. setDirectTargetServerIp(String targetIp) Menentukan alamat IP penyedia dalam panggilan berikutnya dari thread saat ini. Metode ini melewati registri dan mengabaikan daftar alamat IP di memori. - Penyedia
Metode Deskripsi getClientIp() Mengambil alamat IP pemanggil. getAppNameOfClient() Mengambil nama aplikasi yang digunakan oleh pemanggil. isHttpRequest() Menentukan apakah panggilan tersebut merupakan panggilan HTTP. getHttpHeader(String key) Mengambil properti header dari permintaan HTTP.
Transmisikan konteks permintaan khusus
RpcContext menyediakan metode untuk mentransmisikan data tambahan ke penyedia tanpa modifikasi antarmuka. Tipe parameter dapat berupa tipe objek domain (DO) khusus atau tipe dasar. Pastikan bahwa ujung peer dapat membuat serialisasi parameter dengan tipe yang sama.
- Tentukan konteks sebelum konsumen memulai panggilan.
//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); - Ambil konteks menggunakan metode penyedia.
//get context data RPCContext rpcContext = RPCContext.getServerContext(); String myContext = (String)rpcContext.getAttachment("tetantId");