本发明涉及单线程技术领域及日志管理技术领域,具体说是一种单线程日志发送管理的方法。
背景技术:
日志管理系统中,常规思路是用一个线程(即单线程)单独管理日志(例如一个线程单独写日志、发送日志等),虽然系统开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程日志管理系统低。如果完成同步任务所用的时间比预计时间长,日志管理系统可能会不响应。
单线程是指程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。
单线程日志发送管理指的是:日志发送请求在同一时间,只能有一个任务在执行,不存在并发任务。在单线程日志发送管理中,如果上一次日志发送请求尚未完成,而新的日志发送请求又已产生,则会出现竞争关系,或导致日志信息不完整,影响日志管理系统的安全、可靠运行。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种单线程日志发送管理的方法,算法简洁,调度清晰,通过同步任务队列避免竞争关系对日志管理的影响,易于维护。
为达到以上目的,本发明采取的技术方案是:
一种单线程日志发送管理的方法,其特征在于,包括如下步骤:
触发日志发送事件sendlog,产生日志派发请求,
日志派发管理模块接收日志派发请求,
日志派发管理模块生成日志发送senddatatask任务,并派发到同步任务队列,
日志发送senddatatask任务在执行过程中,判定当前是否存在竞争关系,
如果存在竞争关系,则将任务持久化后得到日志持久化数据datan,n=1,2,3……,将日志持久化数据datan添加到数据缓存队列,
如果没有竞争关系,则执行以下步骤:
首先设置同步标志isactive为真,
然后执行日志发送网络请求asycsend,
在日志发送网络请求结束后,生成继续日志发送sendnexttask任务,并派发到同步任务队列。
在上述技术方案的基础上,所述继续日志发送sendnexttask任务,从数据缓存队列中获取待发送的日志持久化数据datan,
如果数据缓存队列存在缓存数据,
则从队列头获取一条日志持久化数据datan,
然后执行日志发送网络请求asycsend,
在日志发送网络请求结束后,
生成继续日志发送sendnexttask任务,并派发到同步任务队列。
在上述技术方案的基础上,所述继续日志发送sendnexttask任务,从数据缓存队列中获取待发送的日志持久化数据datan,
如果数据缓存队列没有缓存数据,
则表明不存在需要发送的任务,
设置同步标志isactive为假,
结束发送任务。
在上述技术方案的基础上,竞争关系的判定原则为:
当同步标志isactive为真,此时产生日志派发请求,则认为遇到竞争关系出现。
在上述技术方案的基础上,当收到远端回调信息newworkcallback,则判定当前日志发送网络请求结束。
本发明所述的单线程日志发送管理的方法,算法简洁,调度清晰,通过同步任务队列避免竞争关系对日志管理的影响,易于维护。
附图说明
本发明有如下附图:
图1本发明的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的单线程日志发送管理的方法,包括如下步骤:
触发日志发送事件sendlog,产生日志派发请求,
日志派发管理模块接收日志派发请求,
日志派发管理模块生成日志发送senddatatask任务,并派发到同步任务队列,
日志发送senddatatask任务在执行过程中,判定当前是否存在竞争关系,
如果存在竞争关系,则将任务持久化后得到日志持久化数据datan,n=1,2,3……,将日志持久化数据datan添加到数据缓存队列,
如果没有竞争关系,则执行以下步骤:
首先设置同步标志isactive为真,
然后执行日志发送网络请求asycsend,
在日志发送网络请求结束后,生成继续日志发送sendnexttask任务,并派发到同步任务队列。
在上述技术方案的基础上,所述继续日志发送sendnexttask任务,从数据缓存队列中获取待发送的日志持久化数据datan,
如果数据缓存队列存在缓存数据,
则从队列头获取一条日志持久化数据datan,
然后执行日志发送网络请求asycsend,
在日志发送网络请求结束后,
生成继续日志发送sendnexttask任务,并派发到同步任务队列。
在上述技术方案的基础上,所述继续日志发送sendnexttask任务,从数据缓存队列中获取待发送的日志持久化数据datan,
如果数据缓存队列没有缓存数据,
则表明不存在需要发送的任务,
设置同步标志isactive为假,
结束发送任务。
在上述技术方案的基础上,竞争关系的判定原则为:
当同步标志isactive为真,此时产生日志派发请求,则认为遇到竞争关系出现。
通过同步标志isactive来控制,同一时间只能有一个任务来执行。
在上述技术方案的基础上,当收到远端回调信息newworkcallback,则判定当前日志发送网络请求结束。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。