CN113867913A - 面向微服务的业务请求处理方法、装置、设备及存储介质 - Google Patents
面向微服务的业务请求处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113867913A CN113867913A CN202111135132.1A CN202111135132A CN113867913A CN 113867913 A CN113867913 A CN 113867913A CN 202111135132 A CN202111135132 A CN 202111135132A CN 113867913 A CN113867913 A CN 113867913A
- Authority
- CN
- China
- Prior art keywords
- thread
- request
- target
- main thread
- interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 94
- 238000007639 printing Methods 0.000 claims abstract description 25
- 238000012545 processing Methods 0.000 claims description 75
- 238000010924 continuous production Methods 0.000 claims description 18
- 230000001172 regenerating effect Effects 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 claims description 7
- 241000533950 Leucojum Species 0.000 claims description 4
- 238000013473 artificial intelligence Methods 0.000 abstract description 6
- 238000011161 development Methods 0.000 abstract description 6
- 238000012423 maintenance Methods 0.000 abstract description 4
- 238000005516 engineering process Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 239000004973 liquid crystal related substance Substances 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及人工智能领域,提供面向微服务的业务请求处理方法,通过Spring接口拦截器从接口请求参数中获取或生成链路标识,将链路标识存储在主线程局部变量和主线程日志储存器中,因为在主线程日志储存器中添加了链路标识,从而使得链路可以进行跟踪;采用AOP注解实现自动化进行日志打印,降低了开发成本和维护成本,很大程度上降低了代码入侵;基于Feign请求拦截器,将主线程局部变量中的目标链路标识更新到Feign请求头中,从而解决了Feign调用的链路串联问题;基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法,实现了将链路标识传递到异步线程,Spring拦截器和Feign请求拦截器都是避免了代码入侵。
Description
技术领域
本申请属于人工智能技术领域,尤其涉及一种面向微服务的业务请求处理方法、装置、设备及存储介质。
背景技术
在微服务环境下,是由多个组件共同构成一个接口服务,而各个接口服务都可能会调用多个不同的组件,在调用过程中不可能每次把所有调用参数都传递给被调用的组件,这就导致在通过日志排查问题时,很难区分调用方和被调用方的日志哪些是同一次接口调用的。为了解决这个问题,就需要每次在调用方生成一个唯一的标识(下文统称traceId)传给被调用组件,用来标记出哪些日志是同一次接口调用的。
这种方式虽然达到了最初的目标,但无疑是增加了很多的工作量,于是市面上就有了一种解决方案:因为每次的请求都是要首先经过网关组件的,那么在网关组件就可以生成一个traceId,然后把这个traceId放在接口请求的header中每次向下传递,这就基本解决了问题。
但此方法依然存在不足:代码入侵的同时加大了开发工作量(至少需要修改网关代码,和每个组件引入的公共包代码);在处理异步线程时会出现链路断开,导致无法进行链路跟踪。在接口请求信息打印方面,也需要每次进行特殊处理,增加了很多的开发工作量,还可能导致bug的出现。
发明内容
鉴于以上内容,本发明提供一种面向微服务的业务请求处理方法、装置、设备及存储介质,其目的在于解决现有技术中无法进行链路跟踪的技术问题。
为实现上述目的,本发明提供一种面向微服务的业务请求处理方法,该方法包括:
获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识;
在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中;
基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号;
基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号;
在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程;
在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中;
基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号;
在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
优选的,所述基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识的步骤,包括:
基于Spring接口拦截器从所述业务接口调用请求中获取请求头;
采用Spring接口拦截器从请求头中获取链路标识,当获取成功时,确定存在所述链路标识,当获取失败时,确定不存在所述链路标识。
优选的,所述重新生成一个链路标识作为所述目标链路标识,包括:
采用雪花算法生成一个链路标识,将生成的链路标识的数据格式由long类型转换为String类型,将转换为String类型的链路标识作为所述目标链路标识。
优选的,所述基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程,包括:
采用预设的线程池实例化方法对线程池进行实例化,得到目标实例化后的线程池;
基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法;
基于线程变量管理工具包和所述覆写后的Executor方法,在所述目标实例化后的线程池中创建线程,得到待设置的线程;
从所述主线程日志储存器中复制MDC,将复制的MDC更新到所述待设置的线程中;
对所述待设置的线程中的所述MDC进行解析并判断是否存在所述目标链路标识;
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述待设置的线程的局部变量中获取所述目标链路标识;
将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,得到所述目标线程。
优选的,所述基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法,还包括:
获取预设的TaskExecutor实现类和覆写好的ThreadPoolTaskExecutor;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的TaskExecutor实现类进行实例化,得到待注入的实现类;
将所述待注入的实现类注入到Spring容器中,得到覆写后的TaskExecutor;
获取预设的AsyncExecuto实现类和覆写好的ThreadPoolTaskExecutor;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的AsyncExecutor实现类进行实例化,得到待注入的配置类;
将所述待注入的配置类注入到所述Spring容器中,得到覆写后的ThreadPoolTaskExecutor;
将所述覆写后的TaskExecutor和所述覆写后的ThreadPoolTaskExecutor作为所述覆写后的Executor方法。
优选的,所述当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,包括:
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识;
当获取所述目标链路标识成功时,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,否则,重新生成一个链路标识,将生成的所述链路标识赋值给所述待设置的线程的局部变量和MDC。
优选的,所述接口返回参数包括:目标链路标识、返回参数、接口调用耗时。
为实现上述目的,本发明还提供一种面向微服务的业务请求处理装置,所述装置包括:
获取模块,用于获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识;
赋值模块,用于在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中;
打印模块,用于基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号;
处理模块,用于基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号;
第一判断模块,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程;
第二判断模块,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中;
输出模块,用于基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号;
发送模块,用于在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
为实现上述目的,本发明还提供一种电子设备,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的程序,所述程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行所述面向微服务的业务请求处理方法。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有面向微服务的业务请求处理程序,所述面向微服务的业务请求处理程序被处理器执行时,实现所述面向微服务的业务请求处理方法的步骤。
本发明改进了面向微服务的业务请求处理方法,通过Spring接口拦截器从接口请求参数中获取或生成链路标识,将链路标识存储在主线程局部变量和主线程日志储存器中,因为在主线程日志储存器中添加了链路标识,从而使得链路可以进行跟踪;采用AOP注解实现自动化进行日志打印,降低了开发成本和维护成本,很大程度上降低了代码入侵;基于Feign请求拦截器,将主线程局部变量中的目标链路标识更新到Feign请求头中,从而解决了Feign调用的链路串联问题;基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法,实现了将链路标识传递到异步线程,从而解决了处理异步线程时会出现链路断开的技术问题;Spring拦截器和Feign请求拦截器都是避免了代码入侵。
附图说明
为了更清楚地说明本申请的实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明电子设备较佳实施例的示意图;
图2为图1中面向微服务的业务请求处理装置较佳实施例的模块示意图;
图3为本发明面向微服务的业务请求处理方法较佳实施例的流程图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1所示,为本发明电子设备1较佳实施例的示意图。
该电子设备1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子设备1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System ofMobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子设备1的内部存储单元,例如该电子设备1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子设备1的外部存储设备,例如该电子设备1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
当然,所述存储器11还可以既包括所述电子设备1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子设备1的操作系统和各类应用软件,例如面向微服务的业务请求处理程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子设备1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行面向微服务的业务请求处理程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子设备1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子设备1与其它电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及面向微服务的业务请求处理程序10的电子设备1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子设备1还可以包括目标用户接口,目标用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的目标用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的目标用户界面。
该电子设备1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的面向微服务的业务请求处理程序10时可以实现如下步骤:
获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识;
在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中;
基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号;
基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号;
在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程;
在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中;
基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号;
在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
关于上述步骤的详细介绍,请参照下述图2关于面向微服务的业务请求处理装置100实施例的功能模块图以及图3关于面向微服务的业务请求处理方法实施例的流程图的说明。
参照图2所示,为本发明面向微服务的业务请求处理装置100的功能模块图。
本发明所述面向微服务的业务请求处理装置100可以安装于电子设备中。根据实现的功能,所述面向微服务的业务请求处理装置100可以包括获取模块110、赋值模块120、打印模块130、处理模块140、第一判断模块150、第二判断模块160、输出模块170及发送模块180。本发明所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。
在本实施例中,关于各模块/单元的功能如下:
获取模块110,用于获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识。
在本实施例中,目标客户端,也就是客户端。客户端,可以是移动电子设备的客户端,也可以是电脑的客户端。业务接口调用请求,是用于对业务接口进行调用的请求。在微服务环境下,业务接口可以是多个组件共同组成的接口服务。业务接口调用请求包括header和body两部分,header即为请求头,body即为请求体。请求头中包含content-type等参数。Spring接口拦截器,是Spring拦截器的一种。Spring拦截器是Spring Aop的一种应用,在不修改源码的情况下,执行一段代码,以增强现有方法。通过自定义拦截器并注入Spring容器中来实现接口拦截的功能。
其中,所述基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,包括:
基于Spring接口拦截器从所述业务接口调用请求中获取请求头;
采用Spring接口拦截器从请求头中获取链路标识,当获取成功时,确定存在所述链路标识,当获取失败时,确定不存在所述链路标识。
其中,所述重新生成一个链路标识作为所述目标链路标识,包括:
采用雪花算法生成一个链路标识,将生成的链路标识的数据格式由long类型转换为String类型,将转换为String类型的链路标识作为所述目标链路标识。
赋值模块120,用于在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中。
在本实施例中,在所述Spring接口拦截器中,基于线程变量管理工具包,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中。线程变量管理工具包是采用能将父线程(也就是主线程)的局部变量传递给子线程的工具包,比如,alibaba(公司)的TransmittableThreadLocal(工具包)。主线程局部变量,也就是主线程的局部变量。
打印模块130,用于基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号。
在本实施例中,采用AOP(面向切面的思想)注解的方式,将定义的AOP注解添加到业务接口,即可实现对所述业务接口调用请求对应的业务接口进行接口信息打印。
AOP注解的AOP参数包括:接口描述、是否打印入参、是否打印出参。
其中,采用AOP注解的方式,将定义的接口信息打印的AOP注解添加到业务接口,基于所述主线程日志储存器中的所述目标链路标识,对所述业务接口调用请求对应的业务接口进行接口信息打印,打印出请求uri、自定义的请求描述、url、请求的参数、目标链路标识,打印结束生成所述请求参数日志输出完成信号,将打印的请求uri、自定义的请求描述、url、请求的参数、目标链路标识作为调用请求参数日志,请求的参数包括:入参参数名、入参参数值。基于AOP注解的方式,不直接干扰代码运行,无论增加注解或删除注解,接口代码都能够正常运行,减少了代码的复杂度,降低了代码的耦合度,避免接口信息打印引发问题,从而解决了目标链路标识传递给被调用组件的方法导致代码入侵的技术问题。
比如,原来接口定义为:@GetMapping(“/demo”)Public String demo(),采用AOP注解的方式,将定义的AOP注解添加到业务接口,添加最少原则入参的Aop之后为:@GetMapping(“/demo”)@ApiLogger(description="demo")Public String demo(),在此举例不做具体限定。
处理模块140,用于基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号。
在本实施例中,基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口的接口业务逻辑代码进行运行,以用于实现逻辑处理,接口业务逻辑代码运行结束生成逻辑处理结束信号。
第一判断模块150,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程。
在本实施例中,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,基于所述主线程局部变量和所述主线程日志储存器,采用覆写线程池的创建线程的方法进行线程创建,将创建的线程作为目标线程。目标线程可以是异步线程,实现了将目标链路标识传递给异步线程,从而达到对异步线程进行链路跟踪的目的,避免了处理异步线程时会出现链路断开的技术问题。
线程池的创建线程的方法包括:ThreadPoolExecutor、ThreadPoolTaskScheduler、ThreadPoolTaskExecutor。ThreadPoolTaskScheduler,也就是线程池任务调度类。
可选的,所述基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程,包括:
采用预设的线程池实例化方法对线程池进行实例化,得到目标实例化后的线程池;
基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法;
基于线程变量管理工具包和所述覆写后的Executor方法,在所述目标实例化后的线程池中创建线程,得到待设置的线程;
从所述主线程日志储存器中复制MDC,将复制的MDC更新到所述待设置的线程中;
对所述待设置的线程中的所述MDC进行解析并判断是否存在所述目标链路标识;
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述待设置的线程的局部变量中获取所述目标链路标识;
将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,得到所述目标线程。
可选的,所述基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法,还包括:
获取预设的TaskExecutor实现类和覆写好的ThreadPoolTaskExecutor;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的TaskExecutor实现类进行实例化,得到待注入的实现类;
将所述待注入的实现类注入到Spring容器中,得到覆写后的TaskExecutor;
获取预设的AsyncExecutor实现类和覆写好的ThreadPoolTaskExecutorT;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的AsyncExecutor实现类进行实例化,得到待注入的配置类;
将所述待注入的配置类注入到所述Spring容器中,得到覆写后的ThreadPoolTaskExecutor;将所述覆写后的TaskExecutor和所述覆写后的ThreadPoolTaskExecutor作为所述覆写后的Executor方法。
可选的,所述当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,包括:
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识;
当获取所述目标链路标识成功时,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,否则,重新生成一个链路标识,将生成的所述链路标识赋值给所述待设置的线程的局部变量和MDC。
其中,待注入的实现类也就是自定义的TaskExecutor。待注入的配置类是指继承AsyncConfigurerSupport的配置类。
MDC,也就是Mapped Diagnostic Context,也称为映射调试上下文,是log4j和logback提供的一种方便在多线程条件下记录日志的类。MDC日志的增强功能,如果配置了MDC,并添加了相应的key-value对,就可以在打印日志的时候把key对应的value打印出来。MDC内部是用ThreadLocal实现的,可以携带当前线程的context信息。
第二判断模块160,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中。
在本实施例中,在Springcloud中,微服务之间一般采用Feign(Feign是Netflix开发的声明试、模版化的HTTP客户端,它调用HTTP API更加便捷优雅)调用,因此组件之间的调用采用Feign请求。
其中,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,获取所述Feign请求头;从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识更新到Feign请求头中,从而实现了将目标链路标识传递给被调用的组件。
输出模块170,用于基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号。
在本实施例中,响应所述逻辑处理结束信号,采用AOP注解的方式,将定义的返回参数的AOP注解添加到业务接口;根据所述主线程日志储存器中的所述目标链路标识,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数,返回参数输出结束生成所述返回参数输出完成信号。接口返回参数,是指业务接口调用请求调用业务接口的返回结果。所述接口返回参数包括:目标链路标识、返回参数、接口调用耗时。
发送模块180,用于在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
在本实施例中,在所述Spring接口拦截器中,响应所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,删除所述目标链路标识结束生成所述主线程结束信号。其中,响应所述主线程结束信号,根据所述业务接口调用请求,将所述接口返回参数发送给所述目标客户端。
在本实施例中,通过Spring接口拦截器从接口请求参数中获取或生成链路标识,将链路标识存储在主线程局部变量和主线程日志储存器中,因为在主线程日志储存器中添加了链路标识,从而使得链路可以进行跟踪;采用AOP注解实现自动化进行日志打印,降低了开发成本和维护成本,很大程度上降低了代码入侵;基于Feign请求拦截器,将主线程局部变量中的目标链路标识更新到Feign请求头中,从而解决了Feign调用的链路串联问题;基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法,实现了将链路标识传递到异步线程,从而解决了处理异步线程时会出现链路断开的技术问题;Spring拦截器和Feign请求拦截器都是避免了代码入侵。
此外,本发明还提供一种面向微服务的业务请求处理方法。参照图3所示,为本发明面向微服务的业务请求处理方法的实施例的方法流程示意图。电子设备1的处理器12执行存储器11中存储的面向微服务的业务请求处理程序10时,实现面向微服务的业务请求处理方法,包括步骤S101-S108。以下对各个步骤进行具体说明。
S101,获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识。
在本实施例中,目标客户端,也就是客户端。客户端,可以是移动电子设备的客户端,也可以是电脑的客户端。业务接口调用请求,是用于对业务接口进行调用的请求。在微服务环境下,业务接口可以是多个组件共同组成的接口服务。业务接口调用请求包括header和body两部分,header即为请求头,body即为请求体。请求头中包含content-type等参数。Spring接口拦截器,是Spring拦截器的一种。Spring拦截器是Spring Aop的一种应用,在不修改源码的情况下,执行一段代码,以增强现有方法。通过自定义拦截器并注入Spring容器中来实现接口拦截的功能。
其中,所述基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,包括:
基于Spring接口拦截器从所述业务接口调用请求中获取请求头;
采用Spring接口拦截器从请求头中获取链路标识,当获取成功时,确定存在所述链路标识,当获取失败时,确定不存在所述链路标识。
其中,所述重新生成一个链路标识作为所述目标链路标识,包括:
采用雪花算法生成一个链路标识,将生成的链路标识的数据格式由long类型转换为String类型,将转换为String类型的链路标识作为所述目标链路标识。
S102,在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中。
在本实施例中,在所述Spring接口拦截器中,基于线程变量管理工具包,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中。线程变量管理工具包是采用能将父线程(也就是主线程)的局部变量传递给子线程的工具包,比如,alibaba(公司)的TransmittableThreadLocal(工具包)。主线程局部变量,也就是主线程的局部变量。
S103,基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号。
在本实施例中,采用AOP(面向切面的思想)注解的方式,将定义的AOP注解添加到业务接口,即可实现对所述业务接口调用请求对应的业务接口进行接口信息打印。
AOP注解的AOP参数包括:接口描述、是否打印入参、是否打印出参。
其中,采用AOP注解的方式,将定义的接口信息打印的AOP注解添加到业务接口,基于所述主线程日志储存器中的所述目标链路标识,对所述业务接口调用请求对应的业务接口进行接口信息打印,打印出请求uri、自定义的请求描述、url、请求的参数、目标链路标识,打印结束生成所述请求参数日志输出完成信号,将打印的请求uri、自定义的请求描述、url、请求的参数、目标链路标识作为调用请求参数日志,请求的参数包括:入参参数名、入参参数值。基于AOP注解的方式,不直接干扰代码运行,无论增加注解或删除注解,接口代码都能够正常运行,减少了代码的复杂度,降低了代码的耦合度,避免接口信息打印引发问题,从而解决了目标链路标识传递给被调用组件的方法导致代码入侵的技术问题。
比如,原来接口定义为:@GetMapping(“/demo”)Public String demo(),采用AOP注解的方式,将定义的AOP注解添加到业务接口,添加最少原则入参的Aop之后为:@GetMapping(“/demo”)@ApiLogger(description="demo")Public String demo(),在此举例不做具体限定。
S104,基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号。
在本实施例中,基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口的接口业务逻辑代码进行运行,以用于实现逻辑处理,接口业务逻辑代码运行结束生成逻辑处理结束信号。
S105,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程。
在本实施例中,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,基于所述主线程局部变量和所述主线程日志储存器,采用覆写线程池的创建线程的方法进行线程创建,将创建的线程作为目标线程。目标线程可以是异步线程,实现了将目标链路标识传递给异步线程,从而达到对异步线程进行链路跟踪的目的,避免了处理异步线程时会出现链路断开的技术问题。
线程池的创建线程的方法包括:ThreadPoolExecutor、ThreadPoolTaskScheduler、ThreadPoolTaskExecutor。ThreadPoolTaskScheduler,也就是线程池任务调度类。
可选的,所述基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程,包括:
采用预设的线程池实例化方法对线程池进行实例化,得到目标实例化后的线程池;
基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法;
基于线程变量管理工具包和所述覆写后的Executor方法,在所述目标实例化后的线程池中创建线程,得到待设置的线程;
从所述主线程日志储存器中复制MDC,将复制的MDC更新到所述待设置的线程中;
对所述待设置的线程中的所述MDC进行解析并判断是否存在所述目标链路标识;
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述待设置的线程的局部变量中获取所述目标链路标识;
将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,得到所述目标线程。
可选的,所述基于所述目标实例化后的线程池,对Executor方法进行覆写,得到覆写后的Executor方法,还包括:
获取预设的TaskExecutor实现类和覆写好的ThreadPoolTaskExecutor;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的TaskExecutor实现类进行实例化,得到待注入的实现类;
将所述待注入的实现类注入到Spring容器中,得到覆写后的TaskExecutor;
获取预设的AsyncExecutor实现类和覆写好的ThreadPoolTaskExecutorT;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的AsyncExecutor实现类进行实例化,得到待注入的配置类;
将所述待注入的配置类注入到所述Spring容器中,得到覆写后的ThreadPoolTaskExecutor;将所述覆写后的TaskExecutor和所述覆写后的ThreadPoolTaskExecutor作为所述覆写后的Executor方法。
可选的,所述当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,包括:
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识;
当获取所述目标链路标识成功时,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,否则,重新生成一个链路标识,将生成的所述链路标识赋值给所述待设置的线程的局部变量和MDC。
其中,待注入的实现类也就是自定义的TaskExecutor。待注入的配置类是指继承AsyncConfigurerSupport的配置类。
MDC,也就是Mapped Diagnostic Context,也称为映射调试上下文,是log4j和logback提供的一种方便在多线程条件下记录日志的类。MDC日志的增强功能,如果配置了MDC,并添加了相应的key-value对,就可以在打印日志的时候把key对应的value打印出来。MDC内部是用ThreadLocal实现的,可以携带当前线程的context信息。
S106,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中。
在本实施例中,在Springcloud中,微服务之间一般采用Feign(Feign是Netflix开发的声明试、模版化的HTTP客户端,它调用HTTP API更加便捷优雅)调用,因此组件之间的调用采用Feign请求。
其中,在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,获取所述Feign请求头;从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识更新到Feign请求头中,从而实现了将目标链路标识传递给被调用的组件。
S107,基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号。
在本实施例中,响应所述逻辑处理结束信号,采用AOP注解的方式,将定义的返回参数的AOP注解添加到业务接口;根据所述主线程日志储存器中的所述目标链路标识,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数,返回参数输出结束生成所述返回参数输出完成信号。接口返回参数,是指业务接口调用请求调用业务接口的返回结果。所述接口返回参数包括:目标链路标识、返回参数、接口调用耗时。
S108,在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
在本实施例中,在所述Spring接口拦截器中,响应所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,删除所述目标链路标识结束生成所述主线程结束信号。其中,响应所述主线程结束信号,根据所述业务接口调用请求,将所述接口返回参数发送给所述目标客户端。
在本实施例中,通过Spring接口拦截器从接口请求参数中获取或生成链路标识,将链路标识存储在主线程局部变量和主线程日志储存器中,因为在主线程日志储存器中添加了链路标识,从而使得链路可以进行跟踪;采用AOP注解实现自动化进行日志打印,降低了开发成本和维护成本,很大程度上降低了代码入侵;基于Feign请求拦截器,将主线程局部变量中的目标链路标识更新到Feign请求头中,从而解决了Feign调用的链路串联问题;基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法,实现了将链路标识传递到异步线程,从而解决了处理异步线程时会出现链路断开的技术问题;Spring拦截器和Feign请求拦截器都是避免了代码入侵。
此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括存储数据区和存储程序区,存储数据区存储根据区块链节点的使用所创建的数据,存储程序区存储有面向微服务的业务请求处理程序10,所述面向微服务的业务请求处理程序10被处理器执行时,实现面向微服务的业务请求处理方法的操作。
在另一个实施例中,本发明所提供的面向微服务的业务请求处理方法,为进一步保证上述所有出现的数据的私密和安全性,上述所有数据还可以存储于一区块链的节点中。
需要说明的是,本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
本发明之计算机可读存储介质的具体实施方式与上述面向微服务的业务请求处理方法的具体实施方式大致相同,在此不再赘述。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语"包括"、"包含"或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
需要说明的是,上述本发明实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用于使得一台电子设备(可以是手机,计算机,电子装置,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
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实现类进行实例化,得到待注入的实现类;
将所述待注入的实现类注入到Spring容器中,得到覆写后的TaskExecutor;
获取预设的AsyncExecuto实现类和覆写好的ThreadPoolTaskExecutor;
基于所述目标实例化后的线程池,采用所述覆写好的ThreadPoolTaskExecutor对所述预设的AsyncExecutor实现类进行实例化,得到待注入的配置类;
将所述待注入的配置类注入到所述Spring容器中,得到覆写后的ThreadPoolTaskExecutor;
将所述覆写后的TaskExecutor和所述覆写后的ThreadPoolTaskExecutor作为所述覆写后的Executor方法。
6.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,包括:
当所述待设置的线程中的所述MDC中不存在所述目标链路标识时,从所述主线程局部变量中获取所述目标链路标识;
当获取所述目标链路标识成功时,将获取的所述目标链路标识赋值给所述待设置的线程的局部变量和MDC,否则,重新生成一个链路标识,将生成的所述链路标识赋值给所述待设置的线程的局部变量和MDC。
7.如权利要求1所述的面向微服务的业务请求处理方法,其特征在于,所述接口返回参数包括:目标链路标识、返回参数、接口调用耗时。
8.一种面向微服务的业务请求处理装置,其特征在于,所述装置包括:
获取模块,用于获取目标客户端发送的业务接口调用请求,基于Spring接口拦截器,从所述业务接口调用请求中获取请求头,对获取的请求头进行解析并判断是否存在链路标识,当存在所述链路标识时,将解析得到的所述链路标识作为目标链路标识,否则重新生成一个链路标识作为所述目标链路标识;
赋值模块,用于在所述Spring接口拦截器中,将所述目标链路标识分别赋值到主线程局部变量和主线程日志储存器中;
打印模块,用于基于AOP注解和所述主线程日志储存器,对所述业务接口调用请求对应的业务接口进行接口信息打印,得到调用请求参数日志和请求参数日志输出完成信号;
处理模块,用于基于所述请求参数日志输出完成信号,对所述业务接口调用请求对应的所述业务接口进行逻辑处理,得到逻辑处理结束信号;
第一判断模块,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否需要创建线程,当需要创建线程时,获取预设线程创建规则,基于所述主线程局部变量和所述主线程日志储存器,采用预设的线程池实例化方法和覆写Executor对象的方法进行线程创建,得到目标线程;
第二判断模块,用于在对所述业务接口调用请求对应的所述业务接口进行逻辑处理的持续过程中,判断是否存在组件调用,当存在组件调用时,基于Feign请求拦截器,根据所述主线程局部变量,将所述目标链路标识更新到Feign请求头中;
输出模块,用于基于所述AOP注解、所述逻辑处理结束信号,根据所述主线程日志储存器,对所述业务接口调用请求对应的所述业务接口进行返回参数输出,得到接口返回参数和返回参数输出完成信号;
发送模块,用于在所述Spring接口拦截器中,基于所述返回参数输出完成信号,从所述主线程局部变量和所述主线程日志储存器中删除所述目标链路标识,得到主线程结束信号,基于所述主线程结束信号,将所述接口返回参数发送给所述目标客户端。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的程序,所述程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至7中任一项所述面向微服务的业务请求处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有面向微服务的业务请求处理程序,所述面向微服务的业务请求处理程序被处理器执行时,实现如权利要求1至7中任一项所述面向微服务的业务请求处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111135132.1A CN113867913B (zh) | 2021-09-27 | 面向微服务的业务请求处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111135132.1A CN113867913B (zh) | 2021-09-27 | 面向微服务的业务请求处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113867913A true CN113867913A (zh) | 2021-12-31 |
CN113867913B CN113867913B (zh) | 2024-10-01 |
Family
ID=
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
CN114637554A (zh) * | 2022-03-18 | 2022-06-17 | 中国建设银行股份有限公司 | 接口调用方法、装置、设备及存储介质 |
CN114661256A (zh) * | 2022-05-20 | 2022-06-24 | 苏州万店掌网络科技有限公司 | 一种数据采集方法、装置、设备及存储介质 |
CN114721916A (zh) * | 2022-03-08 | 2022-07-08 | 北京健康之家科技有限公司 | 日志生成方法、装置、终端设备及介质 |
CN114785878A (zh) * | 2022-04-24 | 2022-07-22 | 北京印象笔记科技有限公司 | 信息提取方法及装置、电子设备、计算机可读存储介质 |
CN114827228A (zh) * | 2022-04-21 | 2022-07-29 | 马上消费金融股份有限公司 | 链路处理方法及装置 |
CN116055569A (zh) * | 2023-03-31 | 2023-05-02 | 浙江华东工程数字技术有限公司 | 自定义切换时区的方法、系统、计算机设备和存储介质 |
CN116881040A (zh) * | 2023-09-08 | 2023-10-13 | 杭州小电科技股份有限公司 | 一种业务操作处理方法、装置、电子装置和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881102A (zh) * | 2020-07-29 | 2020-11-03 | 浪潮云信息技术股份公司 | 基于aop切面采集审计日志的方法、装置及可读介质 |
WO2020233015A1 (zh) * | 2019-05-20 | 2020-11-26 | 平安普惠企业管理有限公司 | 一种链路跟踪方法及装置 |
CN112882919A (zh) * | 2021-03-29 | 2021-06-01 | 浪潮云信息技术股份公司 | 基于log4j的微服务架构的日志链路追踪方法和系统 |
CN113407421A (zh) * | 2021-08-19 | 2021-09-17 | 北京江融信科技有限公司 | 微服务网关的动态日志记录管理方法及系统 |
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020233015A1 (zh) * | 2019-05-20 | 2020-11-26 | 平安普惠企业管理有限公司 | 一种链路跟踪方法及装置 |
CN111881102A (zh) * | 2020-07-29 | 2020-11-03 | 浪潮云信息技术股份公司 | 基于aop切面采集审计日志的方法、装置及可读介质 |
CN112882919A (zh) * | 2021-03-29 | 2021-06-01 | 浪潮云信息技术股份公司 | 基于log4j的微服务架构的日志链路追踪方法和系统 |
CN113407421A (zh) * | 2021-08-19 | 2021-09-17 | 北京江融信科技有限公司 | 微服务网关的动态日志记录管理方法及系统 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
CN114398179B (zh) * | 2022-01-14 | 2023-03-14 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
CN114721916A (zh) * | 2022-03-08 | 2022-07-08 | 北京健康之家科技有限公司 | 日志生成方法、装置、终端设备及介质 |
CN114637554A (zh) * | 2022-03-18 | 2022-06-17 | 中国建设银行股份有限公司 | 接口调用方法、装置、设备及存储介质 |
CN114827228A (zh) * | 2022-04-21 | 2022-07-29 | 马上消费金融股份有限公司 | 链路处理方法及装置 |
CN114827228B (zh) * | 2022-04-21 | 2024-04-09 | 马上消费金融股份有限公司 | 链路处理方法及装置 |
CN114785878A (zh) * | 2022-04-24 | 2022-07-22 | 北京印象笔记科技有限公司 | 信息提取方法及装置、电子设备、计算机可读存储介质 |
CN114661256A (zh) * | 2022-05-20 | 2022-06-24 | 苏州万店掌网络科技有限公司 | 一种数据采集方法、装置、设备及存储介质 |
CN116055569A (zh) * | 2023-03-31 | 2023-05-02 | 浙江华东工程数字技术有限公司 | 自定义切换时区的方法、系统、计算机设备和存储介质 |
CN116881040A (zh) * | 2023-09-08 | 2023-10-13 | 杭州小电科技股份有限公司 | 一种业务操作处理方法、装置、电子装置和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107171825B (zh) | 一种终端的重复日志过滤方法 | |
EP2990942B1 (en) | Service extraction and application composition | |
CN100492300C (zh) | 在微处理器实现的设备上执行进程的系统和方法 | |
CN110569035A (zh) | 软件开发项目的代码编译方法、装置、设备和存储介质 | |
CN111241565B (zh) | 文件控制方法、装置、电子设备及存储介质 | |
WO2020015191A1 (zh) | 业务规则的发布管理方法、电子装置及可读存储介质 | |
CN111580926A (zh) | 模型发布方法、模型部署方法、装置、设备及存储介质 | |
CA2982272C (en) | Automatic task tracking | |
US20190370386A1 (en) | Local data classification based on a remote service interface | |
CN112528296B (zh) | 漏洞检测方法、装置和存储介质及电子设备 | |
CA3123916A1 (en) | Microapp functionality recommendations with cross-application activity correlation | |
CN111614624A (zh) | 风险检测方法、装置、系统及存储介质 | |
CN113836237A (zh) | 对数据库的数据操作进行审计的方法及装置 | |
CN114531477A (zh) | 功能组件的配置方法、装置、计算机设备和存储介质 | |
CN113642021B (zh) | 一种业务代码提交方法、处理方法、装置及电子设备 | |
CN113434254B (zh) | 客户端部署方法、装置、计算机设备及存储介质 | |
CN114185743A (zh) | 一种数据处理方法、装置、计算机设备和存储介质 | |
CN112650659B (zh) | 埋点设置方法、装置、计算机设备和存储介质 | |
US20210286785A1 (en) | Graph-based application performance optimization platform for cloud computing environment | |
CN113867913B (zh) | 面向微服务的业务请求处理方法、装置、设备及存储介质 | |
CN113867913A (zh) | 面向微服务的业务请求处理方法、装置、设备及存储介质 | |
CN115021995A (zh) | 多渠道登录方法、装置、设备及存储介质 | |
CN114579405A (zh) | 数据处理方法、数据处理装置、电子设备和存储介质 | |
CN113779616A (zh) | 用于识别数据的方法和装置 | |
US11340913B2 (en) | Systems and methods for implementing model-based application control frameworks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |