消息跟踪方法、装置、电子设备及存储介质与流程

文档序号:17356072发布日期:2019-04-09 21:41阅读:180来源:国知局
消息跟踪方法、装置、电子设备及存储介质与流程

本申请涉及通信技术领域,尤其涉及一种消息跟踪方法、装置、电子设备及存储介质。



背景技术:

当前越来越多的企业面临着各种各样的数据集成和系统整合,corba、dcom、rmi等rpc中间件技术也应运而生。现有的微服务架构是把整体的业务服务拆分成多个有明确功能的微服务组件,分布式的部署在服务器上,各个微服务组件之间通过rpc中间件技术相互调用。也就是说,现有的微服务跟踪方案是基于rpc调用的跟踪,每个rpc基本单元span包含客户端和服务器两个过程,如图1所示,rpc客户端在当前时刻发送一个请求(cs)后,服务端在当前时刻的100ms后接收到该请求(sr);在服务端对接收到的请求进行相应处理后,在当前时刻的200ms后发送一个该请求的响应(ss),客户端在当前时刻的300ms后接收到该响应(cr)。其中,cs:clientstart,表示客户端发起请求;

sr:serverreceive,表示服务端收到请求;

ss:serversend,表示服务端完成处理,并将结果发送给客户端;

cr:clientreceive,表示客户端获取到服务端返回信息。

在rpc调用的跟踪方法中服务端和客户端都会记录一个rpc的时间戳上下限。对于一条完整的rpc调用链记录了每个节点(如服务端或客户端)的调用延迟时间,通过该延迟时间,实时监控各个节点的运行情况。

然而,发明人发现由于rpc采用同步处理技术,且一个业务流会经过多个微服务组件,客户端必须等到相应服务端的响应后才能进行该业务的rpc调用链的记录,导致消息跟踪的时效性不高。



技术实现要素:

本申请实施例提供一种消息跟踪方法、装置、电子设备及存储介质,解决了现有技术的上述问题,以提高消息跟踪的时效性。

第一方面,提供了一种消息跟踪方法,应用于消息中间件中,该方法包括:

接收当前业务应用模块发送的更新消息;

确定所述更新消息是否包括跟踪标识;

若所述更新消息不包括跟踪标识,则生成所述更新消息的跟踪标识,并获取所述当前业务应用模块的跟踪信息;若所述更新消息包括跟踪标识,则获取所述当前业务应用模块的跟踪信息;其中,所述当前业务应用模块的跟踪信息包括所述跟踪标识、所述当前业务应用模块的标识、历史业务应用模块的标识、所述当前业务应用模块的键值更新信息,所述历史业务应用模块的标识为所述消息中间件存储的所述跟踪标识在经过所述当前业务应用模块前最后经过的业务应用模块的标识;以及,当检测到业务应用模块的订阅信息中存在与所述当前业务应用模块有业务关联的关联业务应用模块时,向所述关联业务应用模块发送包括所述跟踪标识和所述当前业务应用模块的键值更新信息的订阅通告,以使所述关联业务应用模块根据所述当前业务应用模块的更新信息和预设回调函数获取与所述当前业务应用模块的更新信息对应的所述关联业务应用模块的更新信息。

在一个可选的实现中,获取所述当前业务应用模块的跟踪信息,包括:

若所述更新消息不包括跟踪标识,则从所述更新消息获取所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;设置所述历史业务应用模块的标识为预设根标识;将生成的跟踪标识、设置的预设根标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则从所述更新消息获取所述跟踪标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;查询所述跟踪标识在经过所述当前业务应用模块前最后经过的所述历史业务应用模块的标识;将所述跟踪标识、所述历史业务应用模块的标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息。

在一个可选的实现中,获取所述当前业务应用模块的跟踪信息之后,还包括:

将所述跟踪信息写入操作日志。

第二方面,提供了一种消息跟踪方法,应用于业务应用模块中,该方法包括:

根据获取的键值更新信息,向消息中间件发送最初键值更新消息,所述最初键值更新消息包括当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;或者,接收所述消息中间件发送的订阅通告,所述订阅通告包括跟踪标识和与所述当前业务应用模块关联的关联业务应用模块的键值更新信息,所述跟踪标识是所述消息中间件根据所述最初键值更新消息生成的;

根据所述关联业务应用模块的键值更新信息触发预设回调函数,获取所述当前业务应用模块的键值更新信息;

向所述消息中间件发送更新消息,所述更新消息包括所述跟踪标识、当前业务应用模块的标识和所述当前业务应用模块的键值更新信息。

在一个可选的实现中,接收消息中间件发送的订阅通告之后,还包括:

将所述跟踪标识和所述关联业务应用模块的键值更新信息写入操作日志。

第三方面,提供了一种消息跟踪装置,应用于消息中间件中,该装置包括:

接收单元、确定单元、生成单元、获取单元和发送单元;

所述接收单元,用于接收当前业务应用模块发送的更新消息;

所述确定单元,用于确定所述更新消息是否包括跟踪标识;

所述生成单元,用于若所述更新消息不包括跟踪标识,则生成所述更新消息的跟踪标识;

所述获取单元,用于获取所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则获取所述当前业务应用模块的跟踪信息;其中,所述当前业务应用模块的跟踪信息包括所述跟踪标识、所述当前业务应用模块的标识、历史业务应用模块的标识、所述当前业务应用模块的键值更新信息,所述历史业务应用模块的标识为所述消息中间件存储的所述跟踪标识在经过所述当前业务应用模块前最后经过的业务应用模块的标识;以及,所述发送单元,用于当检测到业务应用模块的订阅信息中存在与所述当前业务应用模块有业务关联的关联业务应用模块时,向所述关联业务应用模块发送包括所述跟踪标识和所述当前业务应用模块的键值更新信息的订阅通告,以使所述关联业务应用模块根据所述当前业务应用模块的更新信息和预设回调函数获取与所述当前业务应用模块的更新信息对应的所述关联业务应用模块的更新信息。

在一个可选的实现中,所述获取单元,具体用于:

若所述更新消息不包括跟踪标识,则从所述更新消息获取所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;设置所述历史业务应用模块的标识为预设根标识;将生成的跟踪标识、设置的预设根标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则从所述更新消息获取所述跟踪标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;查询所述跟踪标识在经过所述当前业务应用模块前最后经过的所述历史业务应用模块的标识;将所述跟踪标识、所述历史业务应用模块的标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息。

在一个可选的实现中,所述装置还包括写入单元;

所述写入单元,用于将所述跟踪信息写入操作日志。

第四方面,提供了一种消息跟踪装置,应用于业务应用模块中,该装置包括:发送单元、接收单元和获取单元;

所述发送单元,用于根据获取的键值更新信息,向消息中间件发送最初键值更新消息,所述最初键值更新消息包括当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;或者,

所述接收单元,用于接收所述消息中间件发送的订阅通告,所述订阅通告包括跟踪标识和与所述当前业务应用模块关联的关联业务应用模块的键值更新信息,所述跟踪标识是所述消息中间件根据所述最初键值更新消息生成的;

所述获取单元,用于根据所述关联业务应用模块的键值更新信息触发预设回调函数,获取所述当前业务应用模块的键值更新信息;

所述发送单元,还用于向所述消息中间件发送更新消息,所述更新消息包括所述跟踪标识、当前业务应用模块的标识和所述当前业务应用模块的键值更新信息。

在一个可选的实现中,所述装置还包括写入单元;

所述写入单元,用于将所述跟踪标识和所述关联业务应用模块的键值更新信息写入操作日志。

第五方面,提供了一种电子设备,该电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述第一方面中任一所述的方法步骤或上述第二方面中任一项上所述的方法步骤。

第六方面,提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面中任一所述的方法步骤或上述第二方面中任一所述的方法步骤。

本发明上述实施例的上述方法在接收当前业务应用模块发送的更新消息后,确定更新消息是否包括跟踪标识;若更新消息不包括跟踪标识,则生成更新消息的跟踪标识,并获取当前业务应用模块的跟踪信息;若更新消息包括跟踪标识,则获取当前业务应用模块的跟踪信息;其中,当前业务应用模块的跟踪信息包括跟踪标识、当前业务应用模块的标识、历史业务应用模块的标识、当前业务应用模块的键值更新信息,历史业务应用模块的标识为消息中间件存储的跟踪标识在经过当前业务应用模块前最后经过的业务应用模块的标识;之后当检测到业务应用模块的订阅信息中存在与当前业务应用模块有业务关联的关联业务应用模块时,向关联业务应用模块发送包括跟踪标识和当前业务应用模块的键值更新信息的订阅通告,以使关联业务应用模块根据当前业务应用模块的更新信息和预设回调函数获取与当前业务应用模块的更新信息对应的关联业务应用模块的更新信息。与现有技术相比,该方法可以实时从业务应用模块和消息中间件中获取同一跟踪标识实现对更新消息的跟踪,提高了消息跟踪的实时性与准确性。

附图说明

图1为本发明实施例提供的消息跟踪方法应用的分布式系统架构图;

图2为本发明实施例提供的一种消息中间件发布/订阅的基本原理示意图;

图3为本发明实施例提供的一种消息跟踪方法的流程示意图;

图4为本发明实施例提供的一种跟踪信息的信息结构示意图;

图5为本发明实施例提供的一种跟踪标识的存储体的结构示意图;

图6为本发明实施例提供的另一种消息跟踪方法的流程示意图;

图7为本发明实施例提供的一种消息跟踪装置的结构示意图;

图8为本发明实施例提供的另一种消息跟踪装置的结构示意图;

图9为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,并不是全部的实施例。基于本申请实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本发明实施例提供的消息跟踪方法可以应用在图1所示的分布式系统中。如图1所示,该系统可以包括:发布客户端、订阅客户端和一个消息服务端,消息服务端可以是消息中间件(message-orientedmiddleware,mom)。

订阅客户端中的业务应用模块(application,app)通过消息中间件与相应的发布客户端中的业务应用模块进行订阅注册,建立业务关联关系;

当发布客户端中的业务应用模块发布消息时,通过消息中间件向相应的订阅客户端中的业务应用模块发布消息。

其中,消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。消息中间件能在不同平台之间通信,实现不同app之间的协同,且能够在客户端和服务端之间提供同步和异步的连接,保证在任何时刻都可以将消息进行传送或者存储转发。

本申请的消息中间件为异步中间件,支持发布/订阅的异步方式,即发送和接收是异步的,发送者无需等待响应,以保证在分布式系统故障时可以保证消息的正常传输,而且发送者可以将消息间接传给多个接收者,提高了程序的性能、可扩展性及健壮性。

如图2所示,消息中间件发布/订阅的基本原理为:消息中间件对每个消息主题topic(或称“消息类型”)的订阅客户端(consumer),如app3和app4,都独立维护一个可变的消息缓存区buf,其中,消息中间件mom通过topic对接收的消息进行分类。消息中间件对发布客户端,如app1和app2,发布的消息,如app1、app2和app5发布的消息主题为topic1的消息,都会被拷贝一份到每个相应订阅客户端的消息缓存区buf中,并主动发布给订阅客户端,如app3和app4,订阅客户端通过监听消息中的可读事件,读取消息并处理。

消息中间件可以是内存型的redis数据库。redis是一个关键字取值(key-value)数据库,对于每个业务请求对应的key是唯一的,key对应的value也是唯一的。关键字类型为字符串类型,值类型可以是字符串(string)类型、字符串列表(lists)类型、字符串集合(sets)类型、有序字符串集合(sortedsets)类型、哈希(hashs)类型。也就是说,在key-value数据库中通过指定的key可以快速查询到其对应的value。

在一个例子中,定义了一个map对象,并放置了两组key-value:key_a为“ming”,对应的value为“1”;key_b为“zi”,对应的value为“2”,表示如下:

map<string,int>map=newhashmap<string,int>();

map.put("ming",1);

map.put("zi",2);

基于上述表达,可知获取“ming”,如map.get("ming"),会得到value为1。

若此时需要放置key_a为“ming”,对应的value为“3”,如map.put("ming",3),由于消息中间件已经存储为“ming”的关键字key_a,且关键字具有唯一性,故原存储的key_a对应的value值“1”将会被覆盖,更新为key_a为“ming”,对应的value为“3”。

在图1所示的分布式系统中,消息中间件,用于接收发布客户端中业务应用模块发送的更新消息,当该更新消息为最初键值更新消息时,为最初键值更新消息分配的跟踪标识(traceid),该traceid可以随机生成,也可以预配置;以及在存储的业务应用模块的订阅信息中查找与发布客户端中业务应用模块相关联的订阅客户端中的业务应用模块,并向该业务应用模块发送包括跟踪标识和键值更新信息的订阅通告。

发布客户端中的业务应用模块,用于获取自身的键值更新信息,向消息中间件发送最初键值更新消息或更新消息,其中,最初键值更新消息包括键值更新信息,更新消息包括键值更新信息和该键值更新消息的跟踪标识。

键值更新信息可以包括更新后的键值,如业务标识key1的新value,和业务应用模块针对该更新的键值做出的操作。

订阅客户端中的业务应用模块,用于接收消息中间件发送的包括跟踪标识和键值更新信息的订阅通告,并根据键值更新信息触发预设回调函数,获取自身的键值更新信息,之后向消息中间件发送更新消息。之后,订阅客户端中的业务应用模块重复发布客户端中的业务应用模块的工作过程,依次类推,直到消息中间件在存储的业务应用模块的订阅信息中查找不到与发布客户端中业务应用模块相关联的业务应用模块,此时终止发送订阅通告,流程结束。

需要说明的是,各个客户端中的业务应用模块使用消息中间件提供的库函数(momclient)与消息中间件进行通信。

以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

图3为本发明实施例提供的一种消息跟踪方法的流程示意图。如图3所示,该方法可以包括:

步骤310、消息中间件接收当前业务应用模块发送的更新消息。

在执行该步骤之前,当前业务应用模块获取键值更新信息,键值更新信息可以包括更新后的键值和当前业务应用针对更新后的键值做出的操作(下面称“更新后的键值对应的操作”),该操作可以为键值更新的操作、发送键值更新信息的操作等。

当前业务应用模块根据获取的键值更新信息,向消息中间件发送更新消息,以使消息中间件接收当前业务应用模块发送的更新消息。

其中,在当前业务应用模块为最初获取键值更新信息的业务应用模块时,该更新消息包括当前业务应用模块的标识和当前业务应用模块的键值更新信息。在当前业务应用模块不为最初获取键值更新信息的业务应用模块时,该更新消息包括跟踪标识、当前业务应用模块的标识和当前业务应用模块的键值更新信息。

步骤320、消息中间件确定更新消息是否包括跟踪标识。

若更新消息不包括跟踪标识,则消息中间件生成该更新消息的跟踪标识后,对更新消息进行解析,得到当前业务应用模块的标识和当前业务应用模块的键值更新信息。

由于发送该更新消息的当前业务应用模块为最初获取键值更新信息的业务应用模块,故设置历史业务应用模块的标识为预设根标识,历史业务应用模块的标识为消息中间件存储的该跟踪标识在经过当前业务应用模块前最后经过的业务应用模块的标识。

将生成的跟踪标识、设置的预设根标识、当前业务应用模块的标识和当前业务应用模块的键值更新信息组成当前业务应用模块的跟踪信息,以获取当前业务应用模块的跟踪信息。

若更新消息包括跟踪标识,则消息中间件对更新消息进行解析,得到该更新消息的跟踪标识、当前业务应用模块的标识和当前业务应用模块的键值更新信息。

由于发送该更新消息的当前业务应用模块不是最初获取键值更新信息的业务应用模块,故查询操作日志中该跟踪标识在经过当前业务应用模块前最后经过的历史业务应用模块的标识;

将跟踪标识、历史业务应用模块的标识、当前业务应用模块的标识和当前业务应用模块的键值更新信息组成当前业务应用模块的跟踪信息,以获取当前业务应用模块的跟踪信息。

在一个例子中,跟踪信息的信息结构如图4所示,包括:跟踪标识(traceid)字段、当前app的标识(currentmoduleid)字段,即当前业务应用模块的标识字段、历史app的标识(lastmoduleid)字段,即历史业务应用模块的标识字段、操作(action)字段,即更新后的键值对应的操作字段、更新后的键值(key-value)字段。

若当前app为最初获取键值更新信息的业务应用模块,则lastmoduleid字段为预设根标识,如root,故此时当前app的跟踪信息包括生成的跟踪标识、当前app的标识、root、更新后的键值和更新后的键值对应的操作。

若当前app不为最初获取键值更新信息的业务应用模块,则lastmoduleid字段为该跟踪标识在经过当前app之前最后经过的app的标识,故此时当前app的跟踪信息包括生成的跟踪标识、当前app标识、历史app的标识、更新后的键值和更新后的键值对应的操作。

可选地,在获取当前业务应用模块的跟踪信息之后,消息中间件将跟踪信息写入操作日志。

进一步的,为了形成消息跟踪链,消息中间件需要将相同的traceid关联起来,但如果单纯在键值key-value的存储结构体中添加traceid字段,那么在消息跟踪不开启时,该traceid字段闲置,造成内存浪费。

现有的redis将key-value存储在一个字符串数组中,存储key-value的字符串数组初始设置时会动态分配。本发明实施例将跟踪标识存储在当前业务应用模块的键值更新信息所在字段的邻近新增字段中,也就是说traceid字段放置在key-value的字符串数组之后。存储体的结构如图5所示,其包括:

key-value字段;

key-value长度字段(len):存储key的长度;

0结束符字段:表示key结束,保证key正常的使用;

alloc字段:标识整个存储结构体的长度;

头字段(head):1字节,标识存储的是traceid,还是其他类型;

跟踪标识字段(traceid):64bit,存储key的traceid。

指示字段:标识key-value后面的存储节点个数,其中,1个head字段和一个traceid字段作为一个存储节点。

步骤330、消息中间件检测存储的业务应用模块的订阅信息中是否存在与当前业务应用模块存在业务关联的关联业务应用模块。

业务应用模块的订阅信息包括与当前业务应用模块存在关联关系(或称“订阅关系”)的至少一个关联业务应用模块的标识。

若业务应用模块的订阅信息中存在至少一个关联业务应用模块的标识,则执行步骤340;若不存在,则结束流程。

步骤340、消息中间件向关联业务应用模块发送包括跟踪标识和当前业务应用模块的键值更新信息的订阅通告。

消息中间件根据关联业务应用模块的标识,向关联业务应用模块发送包括跟踪标识和当前业务应用模块的键值更新信息的订阅通告。

步骤350、关联业务应用模块根据当前业务应用模块的键值更新信息触发预设回调函数,获取关联业务应用模块的键值更新信息。

关联业务应用模块根据当前业务应用模块的键值更新信息中更新后的键值触发关联业务应用模块注册的预设回调函数,获取关联业务应用模块的键值更新信息,该键值更新信息包括与当前业务应用模块更新后的键值关联的关联业务应用模块更新后的键值和该更新后的键值对应的操作。其中,关联业务应用模块更新后的键值不仅与当前业务应用模块更新后的键值存在关联关系,还可以与当前业务应用模块更新后的键值相同。

在获取键值更新信息之后,关联业务应用模块向消息中间件发送更新消息。由于关联业务应用模块不为最初获取键值更新信息的业务应用模块,故该更新消息包括跟踪标识、关联业务应用模块的标识和关联业务应用模块的键值更新信息。

该关联业务应用模块可以作为步骤310中新的当前业务应用模块,故返回执行步骤310。

进一步的,通过分析当前业务应用模块的操作日志、关联业务应用模块的操作日志和消息中间件的操作日志,可以实现消息跟踪,以及业务应用模块的异常定位。

具体为,提取当前业务应用模块的操作日志、关联业务应用模块的操作日志和消息中间件的操作日志,将操作日志中相同的traceid关联起来,可以获得该traceid的消息跟踪链,从而实现消息跟踪,提高了消息跟踪的实时性。

检测当前业务应用模块的操作日志或关联业务应用模块的操作日志中是否记录了键值更新信息;

若未记录,则确定当前业务应用模块或关联业务应用模块的工作状态存在异常;

若有记录,则检测当前业务应用模块的操作日志或关联业务应用模块的操作日志中记录的键值更新信息的写入时间段是否大于预设时间段阈值;

若写入时间段大于预设时间段阈值,则确定当前业务应用模块或关联业务应用模块的工作状态存在异常。

若写入时间段不大于预设时间段阈值,则确定当前业务应用模块或关联业务应用模块的工作状态正常。

在一个例子中,以分布式系统中存在3个app,app0、app1和app2,且app2不存在关联的app3为例,图6所示,上述的消息跟踪方法可以包括:

步骤601、app0获取第一键值更新信息;

该第一键值更新信息为最初的键值更新信息。

步骤602、app0根据获取的第一键值更新信息,向第一消息中间件发送第一更新消息,第一更新消息包括app0的标识和app0的第一键值更新信息。

其中,第一更新消息包括app0的标识和app0中更新后的键值和该更新后的键值对应的操作。

步骤603、第一消息中间件生成第一更新消息的跟踪标识,并获取app0的跟踪信息。

app0的跟踪信息包括跟踪标识、app0的标识、预设根标识和第一键值更新信息。

步骤604、第一消息中间件检测存储的app的订阅信息中是否存在与app0存在业务关联的app1;

若是,则执行步骤605;

若否,则执行步骤615。

步骤605、第一消息中间件向app1发送第一订阅通告。

第一订阅通告包括跟踪标识和app0的第一键值更新信息。

步骤606、app1根据app0的第一键值更新信息触发预设回调函数,获取与app0的第一键值更新信息对应的第二键值更新信息。

app1的第二键值更新信息包括app1的标识和app1的第二键值更新信息,其中,第二键值与第一键值存在关联关系。

步骤607、app1向第二消息中间件发送第二更新消息。

第二更新消息包括app1的标识和app1的第二键值更新信息。

步骤608、第二消息中间件获取app1的跟踪信息。

app1的跟踪信息跟踪标识、app1的标识、app0的标识和app1的第二键值更新信息。

步骤609、第二消息中间件检测存储的app的订阅信息中是否存在与app1存在业务关联的app2;

若是,则执行步骤610;

若否,则执行步骤615。

步骤610、消息中间件向app2发送第二订阅通告。

第二订阅通告包括跟踪标识和app1的第二键值更新信息。

步骤611、app2根据app1的第二键值更新信息触发预设回调函数,获取与app1的第二键值更新信息对应的第三键值更新信息。

app2的第三键值更新信息包括app2的标识和app2的第三键值更新信息,其中,第三键值与第二键值存在关联关系。

步骤612、app2向第三消息中间件发送第三更新消息。

第三更新消息包括app2的标识和app2的第三键值更新信息。

步骤613、第三消息中间件获取app2的跟踪信息。

app2的跟踪信息跟踪标识、app2的标识、app1的标识和app2的第三键值更新信息。

步骤614、第三消息中间件检测存储的app的订阅信息中是否存在与app2存在业务关联的app3;

由于app2不存在关联的app3,故执行步骤615。

步骤615、结束流程。

本发明上述实施例的上述方法在接收当前业务应用模块发送的更新消息后,确定更新消息是否包括跟踪标识;若更新消息不包括跟踪标识,则生成更新消息的跟踪标识,并获取当前业务应用模块的跟踪信息;若更新消息包括跟踪标识,则获取当前业务应用模块的跟踪信息;其中,当前业务应用模块的跟踪信息包括跟踪标识、当前业务应用模块的标识、历史业务应用模块的标识、当前业务应用模块的键值更新信息,历史业务应用模块的标识为消息中间件存储的跟踪标识在经过当前业务应用模块前最后经过的业务应用模块的标识;之后当检测到业务应用模块的订阅信息中存在与当前业务应用模块有业务关联的关联业务应用模块时,向关联业务应用模块发送包括跟踪标识和当前业务应用模块的键值更新信息的订阅通告,以使关联业务应用模块根据当前业务应用模块的更新信息和预设回调函数获取与当前业务应用模块的更新信息对应的关联业务应用模块的更新信息。与现有技术相比,该方法可以实时从业务应用模块和消息中间件中获取同一跟踪标识实现对更新消息的跟踪,提高了消息跟踪的实时性与准确性。

与上述方法对应的,本发明实施例还提供一种消息跟踪装置,如图7所示,该消息跟踪装置包括:接收单元710、确定单元720、生成单元730、获取单元740和发送单元750;

接收单元710,用于接收当前业务应用模块发送的更新消息;

确定单元720,用于确定所述更新消息是否包括跟踪标识;

生成单元730,用于若所述更新消息不包括跟踪标识,则生成所述更新消息的跟踪标识;

获取单元740,用于获取所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则获取所述当前业务应用模块的跟踪信息;其中,所述当前业务应用模块的跟踪信息包括所述跟踪标识、所述当前业务应用模块的标识、历史业务应用模块的标识、所述当前业务应用模块的键值更新信息,所述历史业务应用模块的标识为所述消息中间件存储的所述跟踪标识在经过所述当前业务应用模块前最后经过的业务应用模块的标识;以及,

发送单元750,用于当检测到业务应用模块的订阅信息中存在与所述当前业务应用模块有业务关联的关联业务应用模块时,向所述关联业务应用模块发送包括所述跟踪标识和所述当前业务应用模块的键值更新信息的订阅通告,以使所述关联业务应用模块根据所述当前业务应用模块的更新信息和预设回调函数获取与所述当前业务应用模块的更新信息对应的所述关联业务应用模块的更新信息。

在一个可选的实现中,获取单元740,具体用于若所述更新消息不包括跟踪标识,则从所述更新消息获取所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;设置所述历史业务应用模块的标识为预设根标识;将生成的跟踪标识、设置的预设根标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则从所述更新消息获取所述跟踪标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;查询所述跟踪标识在经过所述当前业务应用模块前最后经过的所述历史业务应用模块的标识;将所述跟踪标识、所述历史业务应用模块的标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息。

在一个可选的实现中,所述装置还包括写入单元760;

写入单元760,用于将所述跟踪信息写入操作日志。

本发明上述实施例提供的消息跟踪装置的各功能单元的功能,可以通过上述各方法步骤来实现,因此,本发明实施例提供的消息跟踪装置中的各个单元的具体工作过程和有益效果,在此不复赘述。

与上述方法对应的,本发明实施例还提供一种消息跟踪装置,如图8所示,该消息跟踪装置包括:发送单元810、接收单元820和获取单元830;

发送单元810,用于根据获取的键值更新信息,向消息中间件发送最初键值更新消息,所述最初键值更新消息包括当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;或者,

接收单元820,用于接收所述消息中间件发送的订阅通告,所述订阅通告包括跟踪标识和与所述当前业务应用模块关联的关联业务应用模块的键值更新信息,所述跟踪标识是所述消息中间件根据所述最初键值更新消息生成的;

获取单元830,用于根据所述关联业务应用模块的键值更新信息触发预设回调函数,获取所述当前业务应用模块的键值更新信息;

发送单元810,还用于向所述消息中间件发送更新消息,所述更新消息包括所述跟踪标识、当前业务应用模块的标识和所述当前业务应用模块的键值更新信息。

在一个可选的实现中,所述装置还包括写入单元840;

写入单元840,用于将所述跟踪标识和所述关联业务应用模块的键值更新信息写入操作日志。

本发明上述实施例提供的消息跟踪装置的各功能单元的功能,可以通过上述各方法步骤来实现,因此,本发明实施例提供的消息跟踪装置中的各个单元的具体工作过程和有益效果,在此不复赘述。

本发明实施例还提供了一种电子设备,如图9所示,包括处理器910、通信接口920、存储器930和通信总线940,其中,处理器910,通信接口920,存储器930通过通信总线940完成相互间的通信。

存储器930,用于存放计算机程序;

处理器910,用于执行存储器930上所存放的程序时,实现如下步骤:

接收当前业务应用模块发送的更新消息;

确定所述更新消息是否包括跟踪标识;

若所述更新消息不包括跟踪标识,则生成所述更新消息的跟踪标识,并获取所述当前业务应用模块的跟踪信息;若所述更新消息包括跟踪标识,则获取所述当前业务应用模块的跟踪信息;其中,所述当前业务应用模块的跟踪信息包括所述跟踪标识、所述当前业务应用模块的标识、历史业务应用模块的标识、所述当前业务应用模块的键值更新信息,所述历史业务应用模块的标识为所述消息中间件存储的所述跟踪标识在经过所述当前业务应用模块前最后经过的业务应用模块的标识;以及,

当检测到业务应用模块的订阅信息中存在与所述当前业务应用模块有业务关联的关联业务应用模块时,向所述关联业务应用模块发送包括所述跟踪标识和所述当前业务应用模块的键值更新信息的订阅通告,以使所述关联业务应用模块根据所述当前业务应用模块的更新信息和预设回调函数获取与所述当前业务应用模块的更新信息对应的所述关联业务应用模块的更新信息。

在一个可选的实现中,获取所述当前业务应用模块的跟踪信息,包括:

若所述更新消息不包括跟踪标识,则从所述更新消息获取所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;设置所述历史业务应用模块的标识为预设根标识;将生成的跟踪标识、设置的预设根标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息;

若所述更新消息包括跟踪标识,则从所述更新消息获取所述跟踪标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;将所述跟踪标识存储在所述当前业务应用模块的键值更新信息所在字段的邻近新增字段中;查询所述跟踪标识在经过所述当前业务应用模块前最后经过的所述历史业务应用模块的标识;将所述跟踪标识、所述历史业务应用模块的标识、所述当前业务应用模块的标识和所述当前业务应用模块的键值更新信息组成所述当前业务应用模块的跟踪信息。

在一个可选的实现中,获取所述当前业务应用模块的跟踪信息之后,还包括:

将所述跟踪信息写入操作日志。

或者实现如下步骤:

根据获取的键值更新信息,向消息中间件发送最初键值更新消息,所述最初键值更新消息包括当前业务应用模块的标识和所述当前业务应用模块的键值更新信息;或者,

接收所述消息中间件发送的订阅通告,所述订阅通告包括跟踪标识和与所述当前业务应用模块关联的关联业务应用模块的键值更新信息,所述跟踪标识是所述消息中间件根据所述最初键值更新消息生成的;

根据所述关联业务应用模块的键值更新信息触发预设回调函数,获取所述当前业务应用模块的键值更新信息;

向所述消息中间件发送更新消息,所述更新消息包括所述跟踪标识、当前业务应用模块的标识和所述当前业务应用模块的键值更新信息。

在一个可选的实现中,接收消息中间件发送的订阅通告之后,还包括:

将所述跟踪标识和所述关联业务应用模块的键值更新信息写入操作日志。

上述提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

由于上述实施例中电子设备的各器件解决问题的实施方式以及有益效果可以参见图3所示的实施例中的各步骤来实现,因此,本发明实施例提供的电子设备的具体工作过程和有益效果,在此不复赘述。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的消息跟踪方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的消息跟踪方法。

本领域内的技术人员应明白,本申请实施例中的实施例可提供为方法、系统、或计算机程序产品。因此,本申请实施例中可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例中可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请实施例中是参照根据本申请实施例中实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例中的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例中范围的所有变更和修改。

显然,本领域的技术人员可以对本申请实施例中实施例进行各种改动和变型而不脱离本申请实施例中实施例的精神和范围。这样,倘若本申请实施例中实施例的这些修改和变型属于本申请实施例中权利要求及其等同技术的范围之内,则本申请实施例中也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1