System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及信息处理,特别是涉及一种链路信息传递方法、装置、电子设备及存储介质。
技术介绍
1、在微服务架构下,业务程序中的异步子程序可以向微服务发送http请求以请求相应的功能。而一个http请求的发出,可能会触发对多个微服务的调用,即某个功能的实现涉及到多个微服务的协同,因此,通常可以通过链路信息来标记该http请求涉及的对多个微服务的调用过程,从而确定该http请求对应的调用链路,其中,链路信息可以是针对http请求分配的唯一标识。示例性的,http请求1发送至微服务a,微服务a接收到http请求1后,可以发送http请求2至微服务b,则http请求1的链路信息和http请求2的链路信息是对应的,从而可以确定出http请求1调用微服务a和http请求2调用微服务b属于同一调用链路。
2、相关技术中,在http请求构造的过程中可以将链路信息存储到http header(http消息头)中,业务程序中的异步子程序在调用线程执行向目标微服务发送http请求的过程中,可以将链路信息存储到该线程中;在异步子程序接收目标微服务针对http请求返回的数据后,在执行针对http请求返回的数据的处理业务时,需要从该线程中获取链路信息来使用,例如,所述处理业务调用其它服务时,可以将所述链路信息进行传递。
3、但是,线程是可以多路复用的(即一个线程可以同时发送多个http请求),从而一个线程可以存储多个http请求的链路信息,这会导致异步子程序在执行针对http请求返回的数据的处理业务时,无法从该线程中准确获取该http请
4、因此,如何实现兼顾在业务处理过程可以准确获取链路信息以及无侵入式的对业务程序进行修改,成为亟需解决的技术问题。
技术实现思路
1、本申请实施例的目的在于提供一种链路信息传递方法、装置、电子设备及存储介质,以实现兼顾在业务处理过程可以准确获取链路信息以及无侵入式的对业务程序进行修改。具体技术方案如下:
2、在本申请实施的第一方面,首先提供了一种链路信息传递方法,所述方法应用于业务程序中的目标异步子程序,所述目标异步子程序为用于针对目标微服务进行调用的子程序,且所述目标异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理;所述字节码修改处理用于加入所述链路信息传递方法的处理逻辑,所述方法包括:
3、在对所述目标微服务进行调用处理的过程中,响应于生成针对所述目标微服务的目标调用请求,执行第一传递动作;其中,所述第一传递动作包括将目标链路信息存储到目标存储对象;其中,所述目标链路信息为针对所述目标调用请求生成的链路信息;所述目标存储对象与所述目标调用请求唯一对应;
4、响应于为针对所述目标调用请求的请求结果的处理业务,分配目标线程,执行第二传递动作;其中,所述第二传递动作包括:将所述目标存储对象存储的所述目标链路信息,存储于所述目标线程,以使所述异步子程序基于所述目标线程中所存储的目标链路信息,进行关于所述目标链路信息的链路跟踪处理。
5、可选的,所述目标异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理的具体过程包括:
6、所述业务程序中所加载的代理程序,响应于监听到针对实现所述目标异步子程序的目标类的类加载事件且所述目标类属于预设的用于进行逻辑添加的类,在所述目标类被加载之前,对所述目标类的当前字节码进行字节码修改处理。
7、可选的,所述对所述目标类的当前字节码进行字节码修改处理,包括:
8、确定所述目标类对应的字节码修改方式;其中,所述字节码修改方式包括在第一指定位置进行字节码添加的方式,或,对第二指定位置处的字节码进行调整的方式;
9、按照所确定的字节码修改方式,对所述目标类的当前字节码进行修改,以加入所述链路信息传递方法的处理逻辑。
10、可选的,所述将所述目标存储对象存储的所述目标链路信息,存储于所述目标线程,包括:
11、从所述目标存储对象读取所述目标链路信息,并将所读取到的所述目标链路信息存储于所述目标线程的threadlocal。
12、可选的,在基于所述目标线程中所存储的目标链路信息,进行关于所述目标链路信息的链路跟踪处理后,所述方法还包括:
13、清除所述目标线程所存储的所述目标链路信息。
14、可选的,所述异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理的具体过程,还包括:
15、所述代理程序在所述业务程序的main方法执行之前,执行对类加载事件的监听操作。
16、可选的,所述执行对类加载事件的监听操作包括:
17、所述代理程序通过java instrumentation api调用java虚拟机工具包监听所述目标异步子程序的类加载事件。
18、可选的,所述目标线程为:所述目标异步子程序接收到所述目标微服务针对所述目标调用请求返回的请求结果后,在所述目标异步子程序的线程池中,分配的用于执行针对所述目标调用请求的请求结果的处理业务的线程。
19、在本申请实施的第二方面,还提供了一种链路信息传递装置,所述装置应用于业务程序中的目标异步子程序,所述目标异步子程序为用于针对目标微服务进行调用的子程序,且所述目标异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理;所述字节码修改处理用于加入所述链路信息传递方法的处理逻辑,所述装置包括:
20、第一执行模块,用于在对所述目标微服务进行调用处理的过程中,响应于生成针对所述目标微服务的目标调用请求,执行第一传递动作;其中,所述第一传递动作包括将目标链路信息存储到目标存储对象;其中,所述目标链路信息为针对所述目标调用请求生成的链路信息;所述目标存储对象与所述目标调用请求唯一对应;
21、第二执行模块,用于响应于为针对所述调用请求的请求结果的处理业务,分配目标线程,执行第二传递动作;其中,所述第二传递动作包括:将所述目标存储对象存储的所述目标链路信息,存储于所述目标线程,以使所述异步子程序基于所述目标线程中所存储的目标链路信息,进行关于所述目标链路信息的链路跟踪处理。
22、在本申请实施的又一方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
23、存储器,用于存放计算机程序;
24、处理器,用于执行存储器上所存放的程序时,实现上述任一所述的链路信息传递方法。
25、在本申请实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的链路信息传递方法。
26、本文档来自技高网...
【技术保护点】
1.一种链路信息传递方法,其特征在于,所述方法应用于业务程序中的目标异步子程序,所述目标异步子程序为用于针对目标微服务进行调用的子程序,且所述目标异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理;所述字节码修改处理用于加入所述链路信息传递方法的处理逻辑,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,
3.根据权利要求2所述的方法,其特征在于,所述对所述目标类的当前字节码进行字节码修改处理,包括:
4.根据权利要求1-3任一项所述的方法,其特征在于,所述将所述目标存储对象存储的所述目标链路信息,存储于所述目标线程,包括:
5.根据权利要求1-3任一项所述的方法,其特征在于,在基于所述目标线程中所存储的目标链路信息,进行关于所述目标链路信息的链路跟踪处理后,所述方法还包括:
6.根据权利要求2所述的方法,其特征在于,所述异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理的具体过程,还包括:
7.根据权利要求6所述的方法,其特征在于,所述执行对类加载事件的监听操作包括:
...【技术特征摘要】
1.一种链路信息传递方法,其特征在于,所述方法应用于业务程序中的目标异步子程序,所述目标异步子程序为用于针对目标微服务进行调用的子程序,且所述目标异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理;所述字节码修改处理用于加入所述链路信息传递方法的处理逻辑,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,
3.根据权利要求2所述的方法,其特征在于,所述对所述目标类的当前字节码进行字节码修改处理,包括:
4.根据权利要求1-3任一项所述的方法,其特征在于,所述将所述目标存储对象存储的所述目标链路信息,存储于所述目标线程,包括:
5.根据权利要求1-3任一项所述的方法,其特征在于,在基于所述目标线程中所存储的目标链路信息,进行关于所述目标链路信息的链路跟踪处理后,所述方法还包括:
6.根据权利要求2所述的方法,其特征在于,所述异步子程序通过业务程序中所加载的代理程序,被执行字节码修改处理的具体过程,还包括:
7.根据...
【专利技术属性】
技术研发人员:张城城,赵鑫,
申请(专利权)人:北京奇艺世纪科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。