面向微服务的业务请求处理方法、装置、设备及存储介质制造方法及图纸

技术编号:31707186 阅读:29 留言:0更新日期:2022-01-01 11:09
本申请涉及人工智能领域,提供面向微服务的业务请求处理方法,通过Spring接口拦截器从接口请求参数中获取或生成链路标识,将链路标识存储在主线程局部变量和主线程日志储存器中,因为在主线程日志储存器中添加了链路标识,从而使得链路可以进行跟踪;采用AOP注解实现自动化进行日志打印,降低了开发成本和维护成本,很大程度上降低了代码入侵;基于Feign请求拦截器,将主线程局部变量中的目标链路标识更新到Feign请求头中,从而解决了Feign调用的链路串联问题;基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法,实现了将链路标识传递到异步线程,Spring拦截器和Feign请求拦截器都是避免了代码入侵。拦截器都是避免了代码入侵。拦截器都是避免了代码入侵。

【技术实现步骤摘要】
面向微服务的业务请求处理方法、装置、设备及存储介质


[0001]本申请属于人工智能
,尤其涉及一种面向微服务的业务请求处理方法、装置、设备及存储介质。

技术介绍

[0002]在微服务环境下,是由多个组件共同构成一个接口服务,而各个接口服务都可能会调用多个不同的组件,在调用过程中不可能每次把所有调用参数都传递给被调用的组件,这就导致在通过日志排查问题时,很难区分调用方和被调用方的日志哪些是同一次接口调用的。为了解决这个问题,就需要每次在调用方生成一个唯一的标识(下文统称traceId)传给被调用组件,用来标记出哪些日志是同一次接口调用的。
[0003]这种方式虽然达到了最初的目标,但无疑是增加了很多的工作量,于是市面上就有了一种解决方案:因为每次的请求都是要首先经过网关组件的,那么在网关组件就可以生成一个traceId,然后把这个traceId放在接口请求的header中每次向下传递,这就基本解决了问题。
[0004]但此方法依然存在不足:代码入侵的同时加大了开发工作量(至少需要修改网关代码,和每个组件引入的公共包代码);在本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种面向微服务的业务请求处理方法,其特征在于,所述方法包括:获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识;在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中;基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号;基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号;在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程;在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中;基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号;在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。2.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,包括:基于Spring接口拦截器从所述业务接口调用请求中获取请求头;采用Spring接口拦截器从请求头中获取链路标识,当获取成功时,确定存在所述链路标识,当获取失败时,确定不存在所述链路标识。3.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述重新生成一个链路标识作为所述目标链路标识,包括:采用雪花算法生成一个链路标识,将生成的链路标识的数据格式由long类型转换为String类型,将转换为String类型的链路标识作为所述目标链路标识。4.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程,包括:采用预设的线程池实例化方法对线程池进行实例化,得到目标实例化后的线程池;基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor
方法;基于线程变量管理工具包和所述覆写后的Executor方法,在所述目标实例化后的线程池中创建线程,得到待设置的线程;从所述主线程日志储存器中复制MDC,将复制的MDC更新到所述待设置的线程中;对所述待设置的线程中的所述MDC进行解析并判断是否存在所述目标链路标识;当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述待设置的线程的局部变量中获取所述目标链路标识;将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,得到所述目标线程。5.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法,还包括:获取预设的TaskExecutor实现类和覆写好的ThreadPoolTaskExecutor;基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的TaskExecutor实现类进行实例化,得到待注入...

【专利技术属性】
技术研发人员:邱昶卿
申请(专利权)人:平安国际智慧城市科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1