From 9cf25a765dd0a2f2133c2471a882878c146bf493 Mon Sep 17 00:00:00 2001 From: Wxx <2563806166@qq.com> Date: Thu, 27 Feb 2025 18:45:06 +0800 Subject: [PATCH] =?UTF-8?q?version6:step2-=E6=97=A5=E5=BF=97=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E8=BF=BD=E8=B8=AA=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/RateLimitProvider.class | Bin 2264 -> 2264 bytes .../common/serializer/mycoder/MyDecoder.java | 22 +++++-- .../common/serializer/mycoder/MyEncoder.java | 18 ++++-- .../main/java/common/trace/TraceContext.java | 57 ++++++++++++++++++ .../common/serializer/mycoder/MyDecoder.class | Bin 3033 -> 3619 bytes .../common/serializer/mycoder/MyEncoder.class | Bin 2549 -> 2906 bytes .../classes/common/trace/TraceContext.class | Bin 0 -> 2981 bytes .../java/com/kama/consumer/ConsumerTest.java | 2 +- .../com/kama/consumer/ConsumerTest.class | Bin 3967 -> 3967 bytes version6/krpc-core/pom.xml | 15 +++++ .../kama/client/netty/MDCChannelHandler.java | 42 +++++++++++++ .../client/netty/NettyClientInitializer.java | 14 +++-- .../com/kama/client/proxy/ClientProxy.java | 7 +++ .../client/rpcclient/impl/NettyRpcClient.java | 8 +++ .../server/netty/NettyRpcServerHandler.java | 8 +++ .../server/netty/NettyServerInitializer.java | 4 +- .../ratelimit/provider/RateLimitProvider.java | 6 +- .../java/com/kama/trace/TraceIdGenerator.java | 22 +++++++ .../java/com/kama/trace/ZipkinReporter.java | 48 +++++++++++++++ .../interceptor/ClientTraceInterceptor.java | 47 +++++++++++++++ .../interceptor/ServerTraceInterceptor.java | 47 +++++++++++++++ .../kama/client/netty/MDCChannelHandler.class | Bin 0 -> 2034 bytes .../client/netty/NettyClientInitializer.class | Bin 2486 -> 2292 bytes .../com/kama/client/proxy/ClientProxy.class | Bin 6114 -> 6236 bytes .../rpcclient/impl/NettyRpcClient.class | Bin 4384 -> 4740 bytes .../server/netty/NettyRpcServerHandler.class | Bin 4648 -> 4770 bytes .../server/netty/NettyServerInitializer.class | Bin 1984 -> 1682 bytes .../com/kama/trace/TraceIdGenerator.class | Bin 0 -> 908 bytes .../com/kama/trace/ZipkinReporter.class | Bin 0 -> 2241 bytes .../interceptor/ClientTraceInterceptor.class | Bin 0 -> 2035 bytes .../interceptor/ServerTraceInterceptor.class | Bin 0 -> 2030 bytes version6/pom.xml | 10 +++ 32 files changed, 357 insertions(+), 20 deletions(-) create mode 100644 version6/krpc-common/src/main/java/common/trace/TraceContext.java create mode 100644 version6/krpc-common/target/classes/common/trace/TraceContext.class create mode 100644 version6/krpc-core/src/main/java/com/kama/client/netty/MDCChannelHandler.java create mode 100644 version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java create mode 100644 version6/krpc-core/src/main/java/com/kama/trace/ZipkinReporter.java create mode 100644 version6/krpc-core/src/main/java/com/kama/trace/interceptor/ClientTraceInterceptor.java create mode 100644 version6/krpc-core/src/main/java/com/kama/trace/interceptor/ServerTraceInterceptor.java create mode 100644 version6/krpc-core/target/classes/com/kama/client/netty/MDCChannelHandler.class create mode 100644 version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class create mode 100644 version6/krpc-core/target/classes/com/kama/trace/ZipkinReporter.class create mode 100644 version6/krpc-core/target/classes/com/kama/trace/interceptor/ClientTraceInterceptor.class create mode 100644 version6/krpc-core/target/classes/com/kama/trace/interceptor/ServerTraceInterceptor.class diff --git a/version5/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class b/version5/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class index d8bfe2cab9c3779309b6b2e42a0492f9f63a4edd..4fad8185e17f899732d525726876425c86260fcc 100644 GIT binary patch delta 34 pcmca1ctdc*Y-Uj|Mg|@iS2xE{pOE+<#}HR$1_p+d%^R3CSOKbI2-g4r delta 34 pcmca1ctdc*Y-Z6EMg|@iS2xE{pOE+<#}HR$1_lPM%^R3CSOKwX2-g4r diff --git a/version6/krpc-common/src/main/java/common/serializer/mycoder/MyDecoder.java b/version6/krpc-common/src/main/java/common/serializer/mycoder/MyDecoder.java index 16c2d26..fce0114 100644 --- a/version6/krpc-common/src/main/java/common/serializer/mycoder/MyDecoder.java +++ b/version6/krpc-common/src/main/java/common/serializer/mycoder/MyDecoder.java @@ -4,10 +4,12 @@ package common.serializer.mycoder; import common.exception.SerializeException; import common.message.MessageType; import common.serializer.myserializer.Serializer; +import common.trace.TraceContext; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; import java.util.Arrays; import java.util.List; @@ -27,7 +29,12 @@ public class MyDecoder extends ByteToMessageDecoder { if (in.readableBytes() < 6) { // messageType + serializerType + length return; } - //1.读取消息类型 + //1.读取traceMsg + int traceLength=in.readInt(); + byte[] traceBytes=new byte[traceLength]; + in.readBytes(traceBytes); + serializeTraceMsg(traceBytes); + //2.读取消息类型 short messageType = in.readShort(); // 现在还只支持request与response请求 if (messageType != MessageType.REQUEST.getCode() && @@ -35,19 +42,19 @@ public class MyDecoder extends ByteToMessageDecoder { log.warn("暂不支持此种数据, messageType: {}", messageType); return; } - //2.读取序列化的方式&类型 + //3.读取序列化的方式&类型 short serializerType = in.readShort(); Serializer serializer = Serializer.getSerializerByCode(serializerType); if (serializer == null) { log.error("不存在对应的序列化器, serializerType: {}", serializerType); throw new SerializeException("不存在对应的序列化器, serializerType: " + serializerType); } - //3.读取序列化数组长度 + //4.读取序列化数组长度 int length = in.readInt(); if (in.readableBytes() < length) { return; // 数据不完整,等待更多数据 } - //4.读取序列化数组 + //5.读取序列化数组 byte[] bytes = new byte[length]; in.readBytes(bytes); log.debug("Received bytes: {}", Arrays.toString(bytes)); @@ -55,4 +62,11 @@ public class MyDecoder extends ByteToMessageDecoder { out.add(deserialize); } + //解析并存储traceMsg + private void serializeTraceMsg(byte[] traceByte){ + String traceMsg=new String(traceByte); + String[] msgs=traceMsg.split(";"); + if(!msgs[0].equals("")) TraceContext.setTraceId(msgs[0]); + if(!msgs[1].equals("")) TraceContext.setParentSpanId(msgs[1]); + } } diff --git a/version6/krpc-common/src/main/java/common/serializer/mycoder/MyEncoder.java b/version6/krpc-common/src/main/java/common/serializer/mycoder/MyEncoder.java index 862796f..01efe20 100644 --- a/version6/krpc-common/src/main/java/common/serializer/mycoder/MyEncoder.java +++ b/version6/krpc-common/src/main/java/common/serializer/mycoder/MyEncoder.java @@ -5,11 +5,13 @@ import common.message.MessageType; import common.message.RpcRequest; import common.message.RpcResponse; import common.serializer.myserializer.Serializer; +import common.trace.TraceContext; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; /** * @ClassName MyEncoder @@ -26,7 +28,15 @@ public class MyEncoder extends MessageToByteEncoder { @Override protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { log.debug("Encoding message of type: {}", msg.getClass()); - //1.写入消息类型 + //1.写入trace消息头 + String traceMsg= TraceContext.getTraceId() +";"+TraceContext.getSpanId(); + byte[] traceBytes=traceMsg.getBytes(); + // 1.1写入traceMsg长度 + out.writeInt(traceBytes.length); + // 1.2写入traceBytes + out.writeBytes(traceBytes); + + //2.写入消息类型 if (msg instanceof RpcRequest) { out.writeShort(MessageType.REQUEST.getCode()); } else if (msg instanceof RpcResponse) { @@ -35,16 +45,16 @@ public class MyEncoder extends MessageToByteEncoder { log.error("Unknown message type: {}", msg.getClass()); throw new IllegalArgumentException("Unknown message type: " + msg.getClass()); } - //2.写入序列化方式 + //3.写入序列化方式 out.writeShort(serializer.getType()); //得到序列化数组 byte[] serializeBytes = serializer.serialize(msg); if (serializeBytes == null || serializeBytes.length == 0) { throw new IllegalArgumentException("Serialized message is empty"); } - //3.写入长度 + //4.写入长度 out.writeInt(serializeBytes.length); - //4.写入序列化数组 + //5.写入序列化数组 out.writeBytes(serializeBytes); } } diff --git a/version6/krpc-common/src/main/java/common/trace/TraceContext.java b/version6/krpc-common/src/main/java/common/trace/TraceContext.java new file mode 100644 index 0000000..22c83e3 --- /dev/null +++ b/version6/krpc-common/src/main/java/common/trace/TraceContext.java @@ -0,0 +1,57 @@ +package common.trace; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; + +import java.util.Map; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/18 18:37 + */ +@Slf4j +public class TraceContext { + + public static void setTraceId(String traceId) { + MDC.put("traceId",traceId); + } + + public static String getTraceId() { + return MDC.get("traceId"); + } + + public static void setSpanId(String spanId) { + MDC.put("spanId",spanId); + } + + public static String getSpanId() { + return MDC.get("spanId"); + } + public static void setParentSpanId(String parentSpanId) { + MDC.put("parentSpanId",parentSpanId); + } + + public static String getParentSpanId() { + return MDC.get("parentSpanId"); + } + public static void setStartTimestamp(String startTimestamp) { + MDC.put("startTimestamp",startTimestamp); + } + + public static String getStartTimestamp() { + return MDC.get("startTimestamp"); + } + public static Map getCopy(){ + return MDC.getCopyOfContextMap(); + } + public static void clone(Map context){ + for(Map.Entry entry:context.entrySet()){ + System.out.println(entry.getKey()+":"+entry.getValue()); + MDC.put(entry.getKey(),entry.getValue()); + } + } + public static void clear() { + MDC.clear(); + } +} \ No newline at end of file diff --git a/version6/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class b/version6/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class index 44eb61ae71ab33ada344dd8f528898eff34d2ff2..28629ad0179ed67d25e2715625de2abec995be62 100644 GIT binary patch delta 1676 zcmZvc+jkRH6vlrinP!sd0HHO7RBn}98(PA(m6i&&6evQAl#AGchIRIs5kQz0YrxE>AIj zxjphdP|uCi#;K60(9>3|t2vo9@H5e*h+_MSw{o08h!UMiCX)%<)vCO4V#Z1*V%>>8 zYjZl*X>G{F6$Rz(4Ha7*)%#7RFjWz7%(d-FrLziec|}`*>CDh6GkJiSr$^Qgr)X? zT3T4cgF4GhYN@mTP^-t+^N`L8la)NIsIX6XD(qfQvud&N(nC@r&h&OCgweU>>;J1)SJ8ei=BHPIV!kwv}o>VfLbxIm_3)`4VX03zb%*a?-7isPiHTp~r zJ1P?d-WW?;$!uG1Ea{vb;aQ!W$x)sg7}bueGS}LAD;dx3kxZJ!l#4Vt6e>LJ4R)h1 z;VW<{wMTtcvCbK})O4`Z>dhun$&Aj2_5%Iny1-pMX$@C)+pg%|j1^i>CN9>C|A!8p ztM+&Lit%3=e9d*8ey8LEw&DLteQW>fZ_@IL*>=i5$&LnsYQ$a{sLF-#$ebujogNfP z6S)ANtk26|RCZyQg2)i+x(FU#kkvVcFfYn#j$PmwFUg!&$GPNANK!DnRBDT0p!LiFQcs49@0l>h9Nfm;Cc)+Ac7&h{38s;&t^kvux`G#rtQd?LRE*$0w58IsFH8=O&k~d5xz%=Q+GJ-PkCCn6L zmaKDRzROuA>k1;YFppN|vqgyPU;!}}(#s-pEET@0d4pUHCuOeBQpb6gb4^AnFRDMv zY&+!kjS+ZVjn>VFkTV%q{ zilj>*yLpSZ@}>&nG|~mp)?{BiinV>-5b+I_MTtS4%C%H^7Zs%j z*>{eBhT)mO6aQ z6^SM&_4$OWck(dt+@fr!j-~TyP}unFZr7K&3`3wOl;@cNB2EPAU!6Z$Y+Mt}BSe28 VyI)Sfl-_vVaD;{tiAT$Yk%Kb-&*IJZGTic zH~+cuGtkTDOU}jm3Pq&o9nTF<=8Gjou&H@CLX6FtJ6+;zQB;|8s>&2pOGk{YE(u(P zp72Wj`JCs6R=aHTR!lRkdm`f2r2!4t8pqT$)Ll z`oQjJnvAB^rH!l^3+&z4&Mr-d%WgUq&1O+In_GcFYmcJcWSwl~+ASNi75FJ4gm5Mi+svTKu7$r?&sM_myoz@%9J8Y-C*>#hgz0w-i=agtL4 zB9GPgvO03MoL)g!gulkRBHo5hD{fuojuk2|kzDZos6XD;e^CRx@41$dB|KiHB}*A6%#J7XcsW)IM2U`($zblih8n6ZQ)GM*OGy z6ZR?x)_5XFBAl?})*1^VLAoQEL}ZPl0Y>~1t#XNnWt^d!h>WYlb}B@lT2W{R^)hb_ zbh48kn&_A5+((KLS{SEQ%5P(qET`GUD|B#PqCb-8OYGqXy2_G`ugl^~wjd;;5Yyz# zIxbV-#d1rQDKaApR`3NSfwY9~l)%nPd-{dyCC*46PRgHomY2~&mSIk;EmV%o*u12E zPO#Ve7k@y!rWx_lF diff --git a/version6/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class b/version6/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class index cbdc4b09db2e596ab663d69dd9d00a9822601e56..5ac54161dc2ff2373317c1327e27f531c5ed970a 100644 GIT binary patch delta 1329 zcmZXTTTmNS7{~u7o9s!JEk&e2T1x|nB!M*2mbL_`3WB69Z6#Dhye-KRQeYR8r9dl9 zTeTPOdc3tW>Z4=dXf*|NaGY^`aGdeoC*OSZ$rq6-{A94YjD_sMit1c7|Zuo}IO=xRW>1W_(1heYWM8iw=X9H62%z%rMl1 zBS%jer;YfGVP)efC!e#j-4b?>j-8SeAn(+iVI?!wlx~-f5E>ckW{qh{OdHN<&Y9}d zZL8oImQ!Fj7#4TbooX2+Ry?&vGw$VR(QzMI8LIx9jloYTdY2rNg1zC$c&~;Cq8x2H z+7Y8%IXiBdjn4g?9^Kt3hJ3mQ*3;CR5CN1#;3u!VcuH$}mh+mYL!m(FWv4)CH z?B_V3;~=_37aQEuiEbSapof7|+CDpDGAQ9lQieaM;~|+*bGfN0JMVDxieK5TflfT4 zqaR(Abhtlt;`p&tzaNh>)StAbEqlQV&6E-I~TLflY76&aWulM<2@jo$qgIh^8{)-i+GTNB=8mhrofV5pE~sQ&+5 zQ@5^t^8!5My$qEFGoLeNa%apcMn zd>xB^j*&Gy!5}G8XkWwA9wgMD`W*s6b>lj=$f#<=btgr+4pr8%;`a1Bt%o6hsRmTi zxOSkih$b{6iWYPrOz$;<0g{H$hH=D@!)}}*%N6X!yV!?M(238;YXu4Fz8iT$4VFiP z0vwWPNSMcIF!!{8MH->hEfGhdgdgK9UZCMN;R7t=9Ev^yx1dNz73ayd2EIQqz|qWc zp{C)E{EIIHaFHxtg1$)KFkYsW?gfVkF7aCQHqz0yFEAqe^g#Bhx+T=RCDxX`{wYzD zFP`jvTpB}m6V~Vk0D)@HDyD9MNf!GTtBxAD?DDVRD(#g-eT6*Ua@TjL52}RZ_o%gN G2>u1WgBbDv delta 978 zcmYk4-A^246vlt=%q%ku!)mc0i_3QTD(u2i(OO#CYNdjr_Cpq2YwO3Bj&uv%rMsgP zTHLBhuZ%aZn&>~EiHQlVZlxwQChCP(>ZMoy6O9)di_8s6b?`^uKGHp8a`$j6>Ny4Vf;~|oYF8znmrGGPq2Rcc4>>{nO7yaO9<(#iD zhcYuRz4Y1idknB!$BpC;cePpy{QUV!HBcmnW-|KMSVHKB^d589bSGJl;gH*zoywm) zaXdfekW+NdmzTD8$938|96!R7Hj^Gl!}c?J%*qH?C}U1)v~Ywe zk7=IPpId`!M*m`^yL)-g<9T*Vmyw#8au5nV?s0;X`izllb(tk^GZz+|*MC|2S_-^m zbIRjoPTxEf+fd{2nqMsymrLvZ;!SKNwF!~W#Rfrlck6K;!V>}fkAvSToUxEEYfxAqkJIi z@eyOZE~$IBbyDQ4M534l&Y>dD=M9-hh%ItnCUQxZw!{UQ)RLecvA&(Dzv;JGZswvO zmgJS?JHU!qnWIeBh#1`LEndhDf6c+oy1)iu?@dvej;M`}?PvGeaKmksdq;}S|3}sn sy@%#D;~QSQi3-P{{zug=Jys+78iAaS+`cK_6*eSt#e17;7Vnby7Z2^TO8@`> diff --git a/version6/krpc-common/target/classes/common/trace/TraceContext.class b/version6/krpc-common/target/classes/common/trace/TraceContext.class new file mode 100644 index 0000000000000000000000000000000000000000..2f2f46cfe7f0232bdbca06510286fd2ee680a5ea GIT binary patch literal 2981 zcma)8S##4?6#i~VBHJj07!n9OZGa?D+_DskQ`%y-6bC{bLJQp#`{F2(C0CLu?nd|h z2eiMSuU%%^gwAw$>O+50r_=Vkk{nxD?O>0jt8>pe-`TJJ`1{^(0G`Iz8T4SChF%?g z=oi?yWZX7#mSI`62n;xG zHRoBkjxFV8&KAgDZ&3Wec(JXsDr2Km9!fp+FbnL|=^fmCQwJVS!pxZ1dv*WTPQFaXbH0;-L0OK*)KpUavLVs%k!dcLd?#!=}V4ijQJxml*xXM&|sqrpcp zrL(>W-_HnNl1&ZI#MK0)pctRiaYiww$T)9U4Vh(Wp4D*<=LNRZjAhBxlnwv7=`V7{ z6xzNga5AAhx~n6hU^2LfX${ZoxP)TM`?v!PXI;5t+4L|0CoI>?IN z7%e-snq%jJ4#~}_K8flogA(R6T+=a+>-4MLEJdeUmF{_?%o1n{q#1^gB(Sd&yI>if zm!Bv;D49=V7BA_zft$>VV(KgGJMpmm9SO>CPDo7AfQ|8`iwxn(93w z_WFw^qrAQNpC07}GM@AUC#Ne)O;@9ngWjxh#7i(52K1O(!fp+{Z>h8 z%8-(cbvHYZTo2MT(o~-lp=4HV!*96s{6woKTAe)A?L#-^G(Bg|9b3gN%1}!|eqx@R z!8BNFj@Dk-SrpdF;jB@~i1i-#M&ik6)>{dQre<8(L)&{i4)oA+0}Nz&nPVX;i&odQ z%y>veDk`a|vK1XAnUd3R%ksRb%5SK%O%AJga8R6a9N+U@qdp`3MW^Bo_T#+_?&5t7 zAE?prp}<(X+)Vqnvn+FAMTOI1t)IT>?4gJ;RC>{{E0*-eijK3~s3)9C9jT8A&M_+q z>^D33!_$-9+GS+Hu&feCem;ed*{|Z1;E^?L+tLjhT(aru@J4m=?>|knC?si0h?_I&@gJC}miyS?uQNo53N&Jp=`~%k} zSFuxI6^{xO53XWD;9H#GA}4SkM`wP-@k6WNc)O3&Ts#{r?x6tuj0@d6ES&HD`Bl|U zZ;<&BRwwv1vl~Y+#ZQK-IEFcvnkvN+nxg1+yulSsfeVjMKepFc+q+Hro4nSe=P&3Q zCjZ2R$hSN6jVC&zprWydm-;apGs={(2*WZyL9b7;ben73d%3TE>Fn$ZUib+wwnf6m n8KB5pWaz=$c!$pv1>WWL5kBEtmh_|i#{9HDjnD7}zQX9g3)sE~ literal 0 HcmV?d00001 diff --git a/version6/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java b/version6/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java index 759db0e..5de60e3 100644 --- a/version6/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java +++ b/version6/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java @@ -18,7 +18,7 @@ import java.util.concurrent.Executors; @Slf4j public class ConsumerTest { - private static final int THREAD_POOL_SIZE = 20; + private static final int THREAD_POOL_SIZE = 30; private static final ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); public static void main(String[] args) throws InterruptedException { diff --git a/version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class b/version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class index 9905858b75a0b9bd0c9a66853fbd9aa6d74ae83a..eb527ca09e5a92090693cf764b2ae16da4c7eda7 100644 GIT binary patch delta 20 acmew__g`+q19nEa%@5fjunit junit + + io.zipkin.zipkin2 + zipkin + 3.4.0 + + + io.zipkin.reporter2 + zipkin-reporter + 3.4.0 + + + io.zipkin.reporter2 + zipkin-sender-okhttp3 + 3.4.0 + \ No newline at end of file diff --git a/version6/krpc-core/src/main/java/com/kama/client/netty/MDCChannelHandler.java b/version6/krpc-core/src/main/java/com/kama/client/netty/MDCChannelHandler.java new file mode 100644 index 0000000..ce40c5f --- /dev/null +++ b/version6/krpc-core/src/main/java/com/kama/client/netty/MDCChannelHandler.java @@ -0,0 +1,42 @@ +package com.kama.client.netty; + +import common.trace.TraceContext; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.util.AttributeKey; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/20 16:56 + */ +@Slf4j +public class MDCChannelHandler extends ChannelOutboundHandlerAdapter { + public static final AttributeKey> TRACE_CONTEXT_KEY = AttributeKey.valueOf("TraceContext"); + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + // 从Channel属性中获取Trace上下文 + Map traceContext = + ctx.channel().attr(TRACE_CONTEXT_KEY).get(); + + if (traceContext != null) { + // 设置到当前线程的TraceContext或MDC + TraceContext.clone(traceContext); + log.info("已绑定Trace上下文: {}", traceContext); + } else { + log.error("Trace上下文未设置!"); + } + + // 继续传递请求 + super.write(ctx, msg, promise); + } + +} \ No newline at end of file diff --git a/version6/krpc-core/src/main/java/com/kama/client/netty/NettyClientInitializer.java b/version6/krpc-core/src/main/java/com/kama/client/netty/NettyClientInitializer.java index f64c74d..521aa27 100644 --- a/version6/krpc-core/src/main/java/com/kama/client/netty/NettyClientInitializer.java +++ b/version6/krpc-core/src/main/java/com/kama/client/netty/NettyClientInitializer.java @@ -4,12 +4,15 @@ package com.kama.client.netty; import common.serializer.mycoder.MyDecoder; import common.serializer.mycoder.MyEncoder; import common.serializer.myserializer.Serializer; +import common.trace.TraceContext; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.IdleStateHandler; import lombok.extern.slf4j.Slf4j; +import org.apache.log4j.MDC; +import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -21,22 +24,21 @@ import java.util.concurrent.TimeUnit; */ @Slf4j public class NettyClientInitializer extends ChannelInitializer { - - + public NettyClientInitializer(){} @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); - // 使用自定义的编码器和解码器 try { // 根据传入的序列化器类型初始化编码器 pipeline.addLast(new MyEncoder(Serializer.getSerializerByCode(3))); pipeline.addLast(new MyDecoder()); pipeline.addLast(new NettyClientHandler()); + pipeline.addLast(new MDCChannelHandler()); // 客户端只关注写事件,如果超过2秒没有发送数据,则发送心跳包 - pipeline.addLast(new IdleStateHandler(0, 2, 0, TimeUnit.SECONDS)); - pipeline.addLast(new HeartbeatHandler()); - log.info("Netty client pipeline initialized with serializer type: {}",Serializer.getSerializerByCode(3).toString()); + //pipeline.addLast(new IdleStateHandler(0, 2, 0, TimeUnit.SECONDS)); + //pipeline.addLast(new HeartbeatHandler()); + log.info("Netty client pipeline initialized with serializer type: {}",Serializer.getSerializerByCode(3).getType()); } catch (Exception e) { log.error("Error initializing Netty client pipeline", e); throw e; // 重新抛出异常,确保管道初始化失败时处理正确 diff --git a/version6/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java b/version6/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java index a5361ca..f0b7acc 100644 --- a/version6/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java +++ b/version6/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java @@ -7,8 +7,10 @@ import com.kama.client.rpcclient.RpcClient; import com.kama.client.rpcclient.impl.NettyRpcClient; import com.kama.client.servicecenter.ServiceCenter; import com.kama.client.servicecenter.ZKServiceCenter; +import com.kama.trace.interceptor.ClientTraceInterceptor; import common.message.RpcRequest; import common.message.RpcResponse; +import common.trace.TraceContext; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.InvocationHandler; @@ -39,6 +41,9 @@ public class ClientProxy implements InvocationHandler { //jdk动态代理,每一次代理对象调用方法,都会经过此方法增强(反射获取request对象,socket发送到服务端) @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + //trace记录 + ClientTraceInterceptor.beforeInvoke(); + //System.out.println(TraceContext.getTraceId() +";"+ TraceContext.getSpanId()); //构建request RpcRequest request = RpcRequest.builder() .interfaceName(method.getDeclaringClass().getName()) @@ -83,6 +88,8 @@ public class ClientProxy implements InvocationHandler { } log.info("收到响应: {} 状态码: {}", request.getInterfaceName(), response.getCode()); } + //trace上报 + ClientTraceInterceptor.afterInvoke(method.getName()); return response != null ? response.getData() : null; } diff --git a/version6/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java b/version6/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java index 177b7f3..cbd8d12 100644 --- a/version6/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java +++ b/version6/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java @@ -1,9 +1,11 @@ package com.kama.client.rpcclient.impl; +import com.kama.client.netty.MDCChannelHandler; import com.kama.client.netty.NettyClientInitializer; import com.kama.client.rpcclient.RpcClient; import common.message.RpcRequest; import common.message.RpcResponse; +import common.trace.TraceContext; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -12,8 +14,10 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; import java.net.InetSocketAddress; +import java.util.Map; /** * @ClassName NettyRpcClient @@ -44,6 +48,7 @@ public class NettyRpcClient implements RpcClient { @Override public RpcResponse sendRequest(RpcRequest request) { + Map mdcContextMap=TraceContext.getCopy(); //从注册中心获取host,post if (address == null) { log.error("服务发现失败,返回的地址为 null"); @@ -55,6 +60,9 @@ public class NettyRpcClient implements RpcClient { // 连接到远程服务 ChannelFuture channelFuture = bootstrap.connect(host, port).sync(); Channel channel = channelFuture.channel(); + // 将当前Trace上下文保存到Channel属性 + channel.attr(MDCChannelHandler.TRACE_CONTEXT_KEY).set(mdcContextMap); + // 发送数据 channel.writeAndFlush(request); //sync()堵塞获取结果 diff --git a/version6/krpc-core/src/main/java/com/kama/server/netty/NettyRpcServerHandler.java b/version6/krpc-core/src/main/java/com/kama/server/netty/NettyRpcServerHandler.java index 9c26832..f12a92d 100644 --- a/version6/krpc-core/src/main/java/com/kama/server/netty/NettyRpcServerHandler.java +++ b/version6/krpc-core/src/main/java/com/kama/server/netty/NettyRpcServerHandler.java @@ -3,6 +3,7 @@ package com.kama.server.netty; import com.kama.server.provider.ServiceProvider; import com.kama.server.ratelimit.RateLimit; +import com.kama.trace.interceptor.ServerTraceInterceptor; import common.message.RpcRequest; import common.message.RpcResponse; import io.netty.channel.ChannelFutureListener; @@ -33,8 +34,15 @@ public class NettyRpcServerHandler extends SimpleChannelInboundHandler { protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); // 服务端只关注读事件,如果3秒内没有收到客户端的消息,将会触发IdleState.READER_IDLE事件,将由HeartbeatHandler进行处理 - pipeline.addLast(new IdleStateHandler(3, 0, 0 ,TimeUnit.SECONDS)); - pipeline.addLast(new HeartbeatHandler()); + //pipeline.addLast(new IdleStateHandler(3, 0, 0 ,TimeUnit.SECONDS)); + //pipeline.addLast(new HeartbeatHandler()); //使用自定义的编/解码器 pipeline.addLast(new MyEncoder(Serializer.getSerializerByCode(3))); pipeline.addLast(new MyDecoder()); diff --git a/version6/krpc-core/src/main/java/com/kama/server/ratelimit/provider/RateLimitProvider.java b/version6/krpc-core/src/main/java/com/kama/server/ratelimit/provider/RateLimitProvider.java index b2f7d01..325baea 100644 --- a/version6/krpc-core/src/main/java/com/kama/server/ratelimit/provider/RateLimitProvider.java +++ b/version6/krpc-core/src/main/java/com/kama/server/ratelimit/provider/RateLimitProvider.java @@ -19,13 +19,13 @@ public class RateLimitProvider { private final Map rateLimitMap = new ConcurrentHashMap<>(); // 默认的限流桶容量和令牌生成速率 - private static final int DEFAULT_CAPACITY = 100; - private static final int DEFAULT_RATE = 10; + private static final int DEFAULT_CAPACITY = 10; + private static final int DEFAULT_RATE = 100; // 提供限流实例 public RateLimit getRateLimit(String interfaceName) { return rateLimitMap.computeIfAbsent(interfaceName, key -> { - RateLimit rateLimit = new TokenBucketRateLimitImpl(DEFAULT_CAPACITY, DEFAULT_RATE); + RateLimit rateLimit = new TokenBucketRateLimitImpl(DEFAULT_RATE, DEFAULT_CAPACITY); log.info("为接口 [{}] 创建了新的限流策略: {}", interfaceName, rateLimit); return rateLimit; }); diff --git a/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java b/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java new file mode 100644 index 0000000..1050485 --- /dev/null +++ b/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java @@ -0,0 +1,22 @@ +package com.kama.trace; + +import java.util.UUID; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/16 23:05 + */ +public class TraceIdGenerator { + public static String generateTraceId() { + UUID uuid = UUID.randomUUID(); + String uuidString = uuid.toString(); + // 去掉连字符 + String uuidWithoutHyphens = uuidString.replace("-", ""); + return uuidWithoutHyphens; + } + + public static String generateSpanId() { + return String.valueOf(System.currentTimeMillis()); + } +} diff --git a/version6/krpc-core/src/main/java/com/kama/trace/ZipkinReporter.java b/version6/krpc-core/src/main/java/com/kama/trace/ZipkinReporter.java new file mode 100644 index 0000000..1d527f7 --- /dev/null +++ b/version6/krpc-core/src/main/java/com/kama/trace/ZipkinReporter.java @@ -0,0 +1,48 @@ +package com.kama.trace; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/18 16:41 + */ +import lombok.extern.slf4j.Slf4j; +import zipkin2.Span; +import zipkin2.reporter.AsyncReporter; +import zipkin2.reporter.okhttp3.OkHttpSender; + +import java.util.Map; +@Slf4j +public class ZipkinReporter { + private static final String ZIPKIN_URL = "http://localhost:9411/api/v2/spans"; // Zipkin 服务器地址 + private static final AsyncReporter reporter; + + static { + // 初始化 Zipkin 上报器 + OkHttpSender sender = OkHttpSender.create(ZIPKIN_URL); + reporter = AsyncReporter.create(sender); + } + + /** + * 上报 Span 数据到 Zipkin + */ + public static void reportSpan(String traceId, String spanId, String parentSpanId, + String name, long startTimestamp, long duration, + String serviceName,String type) { + Span span = Span.newBuilder() + .traceId(traceId) + .id(spanId) + .parentId(parentSpanId) + .name(name) + .timestamp(startTimestamp * 1000) // Zipkin 使用微秒 + .duration(duration * 1000) // Zipkin 使用微秒 + .putTag("service",serviceName) + .putTag("type",type) + .build(); + reporter.report(span); + log.info("当前traceId:{}正在上报日志-----",traceId); + } + + public static void close() { + reporter.close(); + } +} \ No newline at end of file diff --git a/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ClientTraceInterceptor.java b/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ClientTraceInterceptor.java new file mode 100644 index 0000000..2c4168b --- /dev/null +++ b/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ClientTraceInterceptor.java @@ -0,0 +1,47 @@ +package com.kama.trace.interceptor; + +import com.kama.trace.TraceIdGenerator; +import com.kama.trace.ZipkinReporter; +import common.trace.TraceContext; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/18 18:30 + */ +public class ClientTraceInterceptor { + public static void beforeInvoke() { + String traceId = TraceContext.getTraceId(); + if (traceId == null) { + traceId = TraceIdGenerator.generateTraceId(); + TraceContext.setTraceId(traceId); + } + String spanId = TraceIdGenerator.generateSpanId(); + TraceContext.setSpanId(spanId); + + // 记录客户端 Span + long startTimestamp = System.currentTimeMillis(); + TraceContext.setStartTimestamp(String.valueOf(startTimestamp)); + } + + public static void afterInvoke(String serviceName) { + long endTimestamp = System.currentTimeMillis(); + long startTimestamp = Long.valueOf(TraceContext.getStartTimestamp()); + long duration = endTimestamp - startTimestamp; + + // 上报客户端 Span + ZipkinReporter.reportSpan( + TraceContext.getTraceId(), + TraceContext.getSpanId(), + TraceContext.getParentSpanId(), + "client-" + serviceName, + startTimestamp, + duration, + serviceName, + "client" + ); + + // 清理 TraceContext + TraceContext.clear(); + } +} \ No newline at end of file diff --git a/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ServerTraceInterceptor.java b/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ServerTraceInterceptor.java new file mode 100644 index 0000000..1260b12 --- /dev/null +++ b/version6/krpc-core/src/main/java/com/kama/trace/interceptor/ServerTraceInterceptor.java @@ -0,0 +1,47 @@ +package com.kama.trace.interceptor; + +import com.kama.trace.TraceIdGenerator; +import com.kama.trace.ZipkinReporter; +import common.trace.TraceContext; +import org.slf4j.MDC; + +/** + * @author wxx + * @version 1.0 + * @create 2025/2/18 18:31 + */ +public class ServerTraceInterceptor { + public static void beforeHandle() { + String traceId = TraceContext.getTraceId(); + String parentSpanId =TraceContext.getParentSpanId(); + String spanId = TraceIdGenerator.generateSpanId(); + TraceContext.setTraceId(traceId); + TraceContext.setSpanId(spanId); + TraceContext.setParentSpanId(parentSpanId); + + // 记录服务端 Span + long startTimestamp = System.currentTimeMillis(); + TraceContext.setStartTimestamp(String.valueOf(startTimestamp)); + } + + public static void afterHandle(String serviceName) { + long endTimestamp = System.currentTimeMillis(); + long startTimestamp = Long.valueOf(TraceContext.getStartTimestamp()); + long duration = endTimestamp - startTimestamp; + + // 上报服务端 Span + ZipkinReporter.reportSpan( + TraceContext.getTraceId(), + TraceContext.getSpanId(), + TraceContext.getParentSpanId(), + "server-" + serviceName, + startTimestamp, + duration, + serviceName, + "server" + ); + + // 清理 TraceContext + TraceContext.clear(); + } +} diff --git a/version6/krpc-core/target/classes/com/kama/client/netty/MDCChannelHandler.class b/version6/krpc-core/target/classes/com/kama/client/netty/MDCChannelHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..104e12f100875056f1d575471d2ab34ee9d6fce8 GIT binary patch literal 2034 zcma)7O;g)e6g|%tk!?f>Bz!o~1Sd_fA)ursO^XRFQB2cfAdOu&=|`w6gd-wL9{D+i z>2%$hcGXQ5o$fo+1v4QF>~xyxs*5iB8}iW~(dqO`RKI&%N)yKmUF5 z6u?zz5d;tvAxP-J5r#>_mMxw0O?rRa1B7R@D;M9fl(_ zhGpqH1)5fKTUkQmOl3+4w=Y>Vp~oI&)#7>47Cbh};2Fpi>I#4!my=w%qy z?4o>MEvm9+8oI@O;)~Z6pR*6c(38D2r=(Vt<)v)uc6MbUb%&4|I2CS~@*L-mk*{!l zLElVv;sp9c^h+4PAj4ogN(_QZ`xvgo|1VrqPOVr3bP_`%h9$g)Qw#&UK&^fxZ$T%a zPLMq7>H}3aRjVK`=htdA;0(@+cwNFdoM(uVQbpU6xua^joOPeO z+IMKCZRrfX@p|M}A(Dxlt9M*N0%L@4+68h-+fG3)n`=|+a@sBwbSD|Y1%{#LJKHaR z{o(o6k6!R+)$g8Fzkl)Y+v$<7zv;vzWDyr7T*4a+$M!}b4Gn9}rh57eyxcNW4Xcpc zpKT%+!W5OH73jrJzx=)R^yP0`F&FMF30LqoLx=7-HdUwZfXIoQ+xpWIl9(aSuN;Gu z3U{08xaS14Hthk-8Xd4_=S{~h8fBdnjbIkOoJDtD>s#(#O*BCA~qxn^6+rREv zA+i~xV5z*~kbs$n3au?nt~0G2<}cfn+lQV_&Ju#4*sB!0J8f9{Ql*&JovfNS-L6gB znrh}$$8guaQQ-HCGD9ML$N@nBL5*)P9J=_lp;-3L!@ko7 zQ6I_J6-U$O4YvaQ`{wPWyB{$c9s#;z0yN=hg3wpg9ot}7@T_SB>6JGSxk7&i*lS|><&3{3lP=GRCgUGOrt{RR9P(zgAcbuLU zqQV~-hzeE2wlUf}9u;bs2;ygSxyv_exE#RP_=SlbyyHR(aG}r8Z3YYx&@cvZiYD|3 z*&b1kj2NI3JP-ggfbq)IBw$(A$&@)-Gu6v&&cvQ zS;7eXgG(Y#hw%k11#-AcG``%GX~GK(^z+4RnEp&`%bX Iz5~er2MqHk!vFvP literal 0 HcmV?d00001 diff --git a/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class b/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class index f3db506557d7917ff755bc7c89f9f81ac0d155a6..15eeb3149e926361b740de8fa79691e35113376f 100644 GIT binary patch delta 723 zcmZXR%TE(g6vlsdre*pVBE^IVB*wRNpo}7j0#y-2iUm|&zHx-1ie)fZh+W~r=+4a~ zZd|!?jU>>z@Uitz@Q*MtF>$A!DTEl!P0r(?+TG~ub(5^6YZehIm$W`b~$xMusbQ+v8IZc-$G4HH6cHZ%FcE&5XId@4OtT_2) zcXUos*OW*G9^vjOZTRX~^YjPlJHGd+qLFQkP>bFIj3>1rQ_uk(zkuJs2NU1a)0QC0Omgp8{`Z{!|J?hde7!RC<=4B9KooZ+^g>%~ zbke44d)^as#&V}pcE}T0 zq|9X6O)g|Iw(FTAQf1V2JcXX?US|jO(ZygD4Z&5U(22wrH5%j1{tuK+_}tll-j;CAnwS_E)*E}}L+WvNvW*<@^u&Ri+A>oSBI Nvl7#oBbDFh{{X{gwwnL| diff --git a/version6/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class b/version6/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class index 74b4edd2922b3eaeb95f0be7f37ed777fd43741e..ce4c829f285aa7c8d3e13c2da3c732ae703e870a 100644 GIT binary patch delta 2299 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 dT;yRk<-Zw{}={yYCZ|M$%toN^}Fe&@e| zs{j_@-U<6jyA3Lw8lJd{Oaxzjhq#})h*Z70QfyN+%IVE+uEHqui45W(|Q-(7W zSsXJp%))Gj1aZWaApS5FIJ1$%F;~Mpco~w!-%64wG^eZC$knLhg<_vMHO7HFyugvK zVKE9sf|4k1D@$|oP^e+440BY~1)BVY&B5kIzl!CgC@EfC;%{mQ)HnIBHi}!8xoneQR(Db*!>EVt z;o-KfVR2-5pxrxRZ;J!5@M+kJDv@oSrTFC$DzzlDiW+g$IwQFnwHkI{DubP7Q{-=I z^40idP@Nq1%M9~Go^^^a@i<2S4IHm%Xhf5k#B(zPXx6X`Rt8&bebC?7*xV50*uyYp zhi{iJqs~`fld)t^mA@fa8>mTw*yagGxj-h&W-s>ST2NV9od z?J(Ps8C^cq@DVyhjcpw}Ew0+K)J%LTF*_svwJl_yiEMk8`)t(pf`-r0Nd(#MtFNx} zH;RBQPGl-vbl9`l7rjIFtxWu5P82gVA^y@@Vq;2!zN(!?zJ|5Ft#y8mn+&=*!KL@(`7WsrV`5QMPFvUm&-BDFG9sA6;8k=bg8B4e(Jh_`7MW14 zTOwG(VA#uD%lfgxYt=2fHG*OjY1cAbM}n7!bgJf-)iy+{RZumrs;ga6w^`>AY%xRU zhRUl*A#n)qi*{0nIo!0LX22B=*AZ*bgV9N8Rs94k2z zfG5OQ<(Uy=uHMM8yNu(GT@hTI71`-Z8z=_kn2+WakLjPgJ@shhxdEYI*3gA`k)scx&zdA7^kiy)Aex} upO75HS+brB<9xZimCR@|p7H`ZRhUK-N}*AuA_r+i509N(ekY>|cmD@0DR&6~ diff --git a/version6/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class b/version6/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class index 2a99cc454e65b6e9d270cff24f790b10d570d18a..525d979fd58fbc57e5985c827da9a172a4246e8c 100644 GIT binary patch delta 1614 zcmZuxU04)V7=F*}?3`uxu;7Bqt_6y$!m_xiXhI57Py#|JprQ#bupkPHts7>RYeqks zT6V;;KmRJtegM&xr8FyxvMg@(qDvpU?z*3EW_j?Yi#g}a_kHtz@4VkTb3W&cN5A>c z*fjtvFmY5LZ%)ND4yQmG(is-E_4fF;2YLejNI1|I^mm0K!Ejq}N2E9GuMdX%g5d@u zUUfgrAX{4cVbfjXoz#KRj?12tynE{01eW3Rg(~@%rI^*o0(Ew3tw0@~U{H4j!XZYKCRnE2qb6%>1lFQn z9#JdpjabLAUSI>7yr8w(8nIj8IqZ??yo|jd8+ZZ>@**4lGj&TeK9LL)u)}%(pJ{j4hce0sR zNcU}lzJR|w5bE^TN5Wm9PLBAB6 z*B8U|I$B(#$jUE>BU{1xVXC#@1g+Vy(K?5o&W3|*mO>VDA{QC(AqxvIKT588mrA^e z26zwe(;c*UZ#rW)~FX_WtNiR+v z`}1R1SnIunq8OHuCZ%;GNChM841-HGaanDFZwyZYqi7hS%4iYQZ7fk;Y7EWvxQnj# z7`B#JT~?P$H=!89C7Mec#j`^tngO$4yNZ@3i?6=P$h+#BtS+rSj(!WAuNtWI62;hz zW;{Q+@15NDQN|d`A_!WGY2?chokl+>H_G6_N*YB4g;${lRrFz16GRQRU^Vul*3@S$ zO>+aiYac$NwTAv>pW_RH*@7H=i9w2y22<+wV~7UFC?CZzE|PlFuoEM=WD=~wWkOM- z<}`Dl{0%=xjHB{jvW1mH;czDc94%m+1Y`8oj3p#TDZwe!PWN8H0dM|g6d9&V%vPfs zz-3aNk*Jy?rJDw4sTE}JuP7Ha{9Qzh49Do+eBX7rV>t5vV8R5}C&BJ}!G^DqK1pnj zSpy_Fl~KGk0%kxlQ}+ZfH(B;7#S~n_H}px+;X1yhfQ`z&qw6Q!G`P^|7u>?{aQz1_ CxHqc+ delta 1534 zcmZux>sM4&6#tz&GxrR44wv_1P>8p~%;2Dc0xC(0iU<{>2v*35BWgU10ehK~ft4wh z9X0K(Sz4Ju$jDHdsY$DUq3>vGwQBXPFFp3X!@@6pxM!bp_CCM!+rPcfJzsRGQ2Y6x z=^Fr6i$Zl)tlnmL&s9p}J5Y9@+Ak;!97(Ljt+T zW3Y90_l1HC`L2@9@=unTv3_u1us^s`LjejoiUf+Wh`}j$XwC$N#IE2#eeXc9e|MlW zD6g;uS{xLV2)N;q>6Ti(6pJ~00%cgj;F5j9B}Xh<9LrG7Q6aD#E97sMVZ92~94iG@ zVKqa6{KJwZ&sZ0-hvlR-SFIIz1Z(9l)(W*wU_Ca-bX%QXk4+p60-MpukR{tGt0CJe zdnq0jcnpur8C#{pk1ZTq1zNC8YU=X*0<;NiHxh^^;*G(9J$<{H0zE+^yC(&nLc83k zmN+^P;Mgh9iCyxb+G#JqZh&cRnnr7+^-3|j-%2Zx7~3J z$2mp>-o#rIJ#kwZ`)J~}*2OYLsZ{#{2LitCKyR1NKhVFow~J$ZqE^%}{aX#+;X20+ zL)`D>NcO0#66&SX_s4GQFWn^r?) ztz>h&Gtj>QOXg9;DHwNqBS>iSltz)FVB0uFSa5>IEE6l2&g4NyJ`zxfH0rZ#EW$hF zcgN5maWYIx0>&wv1~X^x;tXAvhB%zXdj$AC?OMPR@BvM%6!al|ALElbZf)eWkSE39 z<@83ezyePcIV?sck%DtLPxudRRE)<*_mUcH zCuPSee%KR1exv&;ToHIliKR^>L?t8AnFf~{;Mlc;z&ChYstnu)?dc(Lxg`@us!uSGTl6px*=__0|2{zzs zLa~~~EQInmd>mIes{RdQF>D+PM?q|d!w<$WMo_~b0n7%hAvlGy(A?MXvfDEWm(gso z+Nu--WSW%IV^Q;@G_##q;yP;P3Gx}uTuy|HhSA&}?@fdYB6#)x!GsB{&4E4W1v{?d z$Q-deGX{uDR;KXA1egKEOx5bn1S;@ D@Xr~= diff --git a/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class b/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class index 2639814977530c4ff29fd28240ecf267bba902c0..bb69e2c4312e3153148181435795de733bdb0b9a 100644 GIT binary patch delta 571 zcmZvYOHUI~6vuz}&d}*&pj4osNLv`Hotes0P>`2K6IduACN*8Fi*9&@1v?ge0=#Pi zU%`l$MaOt2^5u2&4*0$ypLnU*d!?a&Xk)_+A$K@f9 z%$nM^A1nT&Gnrm;QEOgdmHdiBznQc~QXYd2MVBW$H5=A?ynr871?I{ciV!e~lY!fTF{y!`20x45h{|pT tBpZ*Q+TY3(%nBlcjW=P5AiPBXV(5OB+u$aes9RrJ+(gUHv(UI-{{=anNvi+= delta 858 zcmZuvT~E_s6n@^WtZCN)B2E+sgYnUJ8wKVU4yMS^F$XAQJ3m9wOH0m zre!_S?;54sJ7z_TWp zT`p}`D;2Y3>DS3+vsAPggxvDd`dTW-Fq}Og-TYgdkRYO8#t{S!zYTb;cwt@ZWl*6+}J0B zg$9QI1xE|s4;X7e>mX|66(hOcff6`f(B5LUfwM00il*SOL~#g$8$%ew2<8yR2Hoyp z98WNb6tSW9)L6zP%4mLEMw(tJ;4!+eLQWY%d9WI;5KPOX=sY+{6i26|HIUFE?=btP zv6nQUKfq}aXsh-cNUim;-V`lwl{m*M?s|z@qzUdllK-)al1^^Q0I)pP-5h9S1|0<64?pa_K>TN z_#BJC70rL)(>mwXP29ju1Gg+xu(l|8dK?L#VbzV55<%3JzSxtVCyyt0w5vCP~Gy>{GwzUyj~ZpUiICp1aEF zdr>ty;=PQ9VH~|V9Suc5W#nfPoe>XOL~VA$Sh?br)D4u+H@l@L236dn!PF}arbm

SV1X01d2@m%|2%gy`fCM3$y+X$<3S;|we9b$ivm zc!u)c#uvg9E*lxzTVz)#y8xT=HSZebW@x{OE%I{o12}j{%r@mcqFsux$A7dcbrl3F#ZKTI(}ypLVygChdtl<&Ue1c@4KA*`R}j41GtID zB7CS5P%ohYeumaLSs!hya2DLS5Tw77KM1~<2NgjKZ za&6tr#?MjRCZV0{_30UIsZ+vbz76CRTQl8+$Lx}Dg){3-C8sqI67;M4n~Qf#=s_<- z(A9IA<0`p4LpZW{j=g>f1N=rHQ?M0Rx6A;pk^7Ej@9L_?bw(sa5hEn?1$Rx!GR)S9 z=)y4uFhY*IdwEaym;@Q)3=JC`cS_(X)Z;-+VoJcYgtu{>;Vsq5$va9;kv)9nbuWRd zTHdlV$6;eDz#!y=qQNz2a4j|iDt)o;_gyn`Qg3QBv1UA zj%R3^w@m6t(@iTzf&31p^sK441)J#c|Ebm4$~m7@@wqsqe%{K^&6cEYYRiS(hGwrR z8wPQx>Imz!V(WZgX4bn~y2H?&Jhy*Htyqe%G!P%vfc9)?7vU@}UPLOIrY_?}!RMw_ znt0q3zHKJ#Yk1pH39e1L>o&^fr5P7a(go@a73VVaulb%I7H3+1N*y)+Vhd^V$t&jq5o@FgCA;UUpJtkRyw z8tuRG_6q8Wrk9Mq8^n=mWwbWLUW2{xL{$3nW1s~Y`bs4MXxOA(5Ls*yhhP4O6gASC z+=mb=qG`B@OCv>ej202@sBgoYdJ$JU{3W6#Z|oxcAAIOFQUCw| literal 0 HcmV?d00001 diff --git a/version6/krpc-core/target/classes/com/kama/trace/interceptor/ClientTraceInterceptor.class b/version6/krpc-core/target/classes/com/kama/trace/interceptor/ClientTraceInterceptor.class new file mode 100644 index 0000000000000000000000000000000000000000..2f69e95cf4e5506e869c6e3dd16ae2b73a521922 GIT binary patch literal 2035 zcmb7FTUQ%Z6#fn*OcJKt%0(>KHpP%yVy#*=wY5ZP69Uu*skYt@lLHKy%*4rrCI7-V z{TsgMtUmbaTK*=N%kNA=36P~VSvhlNpMClEclO@-^Y0hG1NaDT3VrA|5Hk_SfWXM1 zJd!y_y8F4U-9u#s0t0t#*ADIp^kcJPF`5QHgeeoR>0m=At||@b7OUFR>n5&fPf2<@k@*UBEb!PD^d=2~1>4 zJ;_O6*+f<&8r6sb=|^Fjfvh()-ZxF$)TxY;=<}yJyk+2)j{Y`tJ!QV^x%&d?Ui5S^ zrnPuGIlN=yU7dN-p=3t`)`9PscwYxj>cB7Q`_M#QOL4@jMoN#Fr1(sFFNPoaQM418*04G#ro&y~+JyHT^_FucU_U3?4RKSDxT4E(S#V^tshS231+HJn zuorLxj=4q>ck|G;2~OY7MXV<9HXH$qH@n0c@e;%bPD_T3-(UZM|hu*WdW z(KNy+qg*fZPhp&sehM>OuVFfhy+E57XL$wNv>B(~=iCYEB(Q_0jQ<7Y35dTiV$dpy zFEPP$o!U=G!QeAT6d#8mo|Rv5dv$(M-H8)$i1$K#kbQx>z~W>)J4T(=5RXntXak)g zfLX$wBgCtijG(2FA)_}q%~$xk8n=D&i!b^*VwzMgR&=T9KRa099r6mne8>HI$HY5Wq+3d#M4UhZ> zzw6)di|*48{s4cJk7stN2`_3T53{p(?%aFsnR93V`19rO06v6kq7VHBQWnw}5E$8) z2eRZycek{$y|3z_z`#A*wZr=Y{e}506B%R;m=*?M2~5?!R?Blsp)c#Iw5i8s&kfZN z+-L5pFt)5V1jY;V)o$oo=-cjYSqB@kFsvgD)BB0^l^fRD(p_zs7)8#&n1yk@e3^+# zP1%yYsa6{gm8*OidcMHWZZcP|_Gd6@;XE!7Nzj92qHr2WQr8<6E^7BI-Mc|%EL_so zVOoy^yn?C9Nk{Z{v=Ew{`Y+NL%+* zs-C+mkUxu`9?G;APwqDET6j-ao^@#1(tvg14=j{*;;c>_pJYx8&BA>=5IEnGO|6i+ z44>KI9%n@Ch9qY0KhhpaCWDWu$UylA$~Uo$PYir&VFeEbW==@tx!rEs?o-wF{7_LK zrXNo=D1qkB0I)U0|_xN?yrlw1^xXh%7 zx@LjYve!^lWYu=ndZ)Fm{7t#-(2}cqb?IzL-`4L(##Fecm3OE5zcZButZlX9`Rb8$ z8#;jzH@a@<-07<6-R|jNeNM3eC^DXMk3a=PMPN|wu+&$P2lbiSb+s;A%ws9Hq1%T0 zT5W+$qr)z@JszA{^E%{b#nx~xp3Tsr)-)Sy$@9X1h}&x_-18d2@BpNVZPX1kv>+KF z-<7}Z9(YYvN{&9!=!&fK91aD3?v=}tV-hsMALOf^*X*>*r&;N-9NV~g*j8t_zv%H# zZs2n71#lE%SvpS54plh=wrnQphns@Lt-8DsmmL`dDlo7waQ#$;X8||h2weJiR~~3m zC1&xMpAG%j52_gh9M||(;#2UMF8&7b3nzV8=ct!~bJ*Z$B@TFk&-j+b)4wKST8JNE&^%IP0S&gJ<}HWo7Xttw~uw!GysbB_jAJ!eWG5 zzvA7c%d_fknqVWmPq@XGxChKmri(fHEJb*9667?K&tQn3lQCSyWDF~h0@+;PRldld zCP;(SOg@i6rnvTkfY?LyOQ4Mr=2x_(3G-|E_Td|R%V&mO-|>G3dwerFv(ZEgQ-1+L CX9+X_ literal 0 HcmV?d00001 diff --git a/version6/pom.xml b/version6/pom.xml index 8bf3dbd..27e0731 100644 --- a/version6/pom.xml +++ b/version6/pom.xml @@ -74,6 +74,16 @@ guava-retrying 2.0.0 + + io.zipkin.zipkin2 + zipkin + 3.4.0 + + + io.zipkin.reporter2 + zipkin-reporter + 3.4.0 +