即时通信系统中的消息传递跟踪方法和设备的制造方法

文档序号:9420231阅读:440来源:国知局
即时通信系统中的消息传递跟踪方法和设备的制造方法【
技术领域
】[0001]本发明涉及即时通信领域,更具体地,涉及即时通信系统中的消息传递跟踪方法和设备。【
背景技术
】[0002]在即时通信系统中(比如:腾讯QQ,京东咚咚),一条消息从消息的发送者到达消息的接收者,这之间通常会经过至少一个应用内所包含的多个服务模块间的传递。消息在各服务模块间传递的一般实现方式是API(应用编程接口)调用。比如,不同应用之间的远程方法调用方式的API调用,系统内部同一个线程或不同线程之间的方法调用方式的API调用。由于网络的原因或者是即时通信系统内部的原因,通常都无法保证消息100%的到达。因此,在即时通信中,需要有一种可以对消息进行跟踪、识别出消息传递的路径,并定位出消息丢失位置的机制。[0003]现有的技术方案是在各服务模块内的业务代码中以硬编码的方式增加消息传递跟踪的逻辑,使得消息传递跟踪的逻辑与正常的业务逻辑相耦合。[0004]然而,现有的技术方案违反了系统设计的开闭原则。并且,如果消息要在同一应用内的多个服务模块之间传递或在多个应用之间传递,则需要修改应用内所包含的相应服务模块内的已有业务代码,这很可能会使现有的系统变得不稳定,也会导致消息传递跟踪逻辑和正常的业务代码产生强耦合的关系。假如不再需要对消息进行跟踪了,还要再把用于消息传递跟踪的代码给删除掉,降低了系统的可维护性。[0005]现有的技术方案的缺点在于,需要修改即时通信系统的服务模块内的已有代码,并且使消息传递跟踪逻辑和正常的业务产生强耦合关系,导致系统的稳定性降低,维护成本增加。[0006]因此,需要一种能够在不需要修改即时通信系统的服务模块内的已有代码的情况下实现对消息的跟踪的技术。【
发明内容】[0007]针对现有技术方案的上述缺点,本发明提出了即时通信系统中的消息传递跟踪方法和设备,能够在不需要修改即时通信系统的已有代码的情况下实现对消息的跟踪。[0008]根据本发明的一方面,提供了一种在即时通信系统中对在多个服务模块之间传递的消息进行跟踪的方法,所述方法包括,针对所述多个服务模块中的至少一个服务模块:[0009]在消息传递至所述服务模块之前,拦截所述消息;[0010]获取所述消息的标识;[0011]记录所述消息的标识和所述服务模块的标识,以指示所述消息能够到达所述服务丰旲块。[0012]在所述服务模块不是消息传递所经过的最后一个服务模块的情况下,所述方法还包括:存储所述消息的标识,以供针对下一服务模块执行的获取步骤从中获取所述消息的标识。[0013]在所述服务模块是消息传递所经过的第一个服务模块的情况下,获取所述消息的标识的步骤包括:生成所述消息的标识。[0014]在所述服务模块不是消息传递所经过的第一个服务模块的情况下,获取所述消息的标识的步骤包括:获取针对前一服务模块的拦截所存储的所述消息的标识。[0015]所述消息传递跟踪方法使用面向切面编程AOP来实现。[0016]根据本发明的另一方面,提供了一种在即时通信系统中对在多个服务模块之间传递的消息进行跟踪的设备,所述设备用于所述多个服务模块中的至少一个服务模块,并且包括:[0017]拦截装置,被配置为:在消息传递至一服务模块之前,拦截所述消息;[0018]处理装置,被配置为:对拦截装置所拦截的消息进行处理,所述处理装置包括:[0019]获取单元,被配置为:获取所述消息的标识;以及[0020]记录单元,被配置为记录所述消息的标识和所述服务模块的标识,以指示所述消息能够到达所述服务模块。[0021]若所述服务模块不是消息传递所经过的最后一个服务模块,所述处理装置还包括:存储单元,被配置为存储所述消息的标识,以供用于下一服务模块的所述设备中的处理装置从中获取所述消息的标识。[0022]若所述服务模块是消息传递所经过的第一个服务模块,所述获取单元生成所述消息的标识。[0023]若所述服务模块不是消息传递所经过的第一个服务模块,所述获取单元从用于前一服务模块中的所述设备中的存储单元获取针对前一服务模块的拦截所存储的所述消息的标识。[0024]所述消息传递跟踪设备使用面向切面编程AOP来实现。[0025]其中,前一服务模块对所述服务模块的服务调用类型包括以下API调用之一:同一进程中的同一线程的API调用;同一进程中的不同线程之间的API调用;不同进程之间的API调用。[0026]其中,同一进程中的同一线程的API调用使用Java中的ThreadLocal来实现;同一进程中的不同线程之间的API调用使用Java中的InheritableThreadLocal来实现;不同进程之间的API调用使用Dubbo框架中的RpcContext来实现。[0027]本发明的技术方案能够在不需要修改即时通信系统的服务模块内的已有代码的情况下实现对消息传递的跟踪,并且使得消息传递跟踪的逻辑与正常的业务逻辑分离、解耦合,易于消息传递跟踪的逻辑与正常的业务逻辑各自的扩展和维护。【附图说明】[0028]图1示出了示例性即时通信系统中的典型消息传递场景;[0029]图2示出了根据本发明示例性实施例的即时通信系统中的消息传递跟踪设备的结构框图;[0030]图3示出了根据本发明示例性实施例的即时通信系统中的消息传递跟踪方法的流程图;[0031]图4示出了应用于图1的示例性消息传递场景的根据本发明示例性实施例的消息传递跟踪方案的概况;[0032]图5示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的接入点服务模块的消息传递跟踪的处理流程图;[0033]图6示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的转发服务模块的消息传递跟踪的处理流程图;[0034]图7示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的消息发送服务模块的消息传递跟踪的处理流程图;以及[0035]图8示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的消息接收服务模块的消息传递跟踪的处理流程图。[0036]在附图中,类似的参考符号表示类似的要件。【具体实施方式】[0037]本发明提出了一种能够在不需要修改即时通信系统的服务模块内的已有代码的情况下实现对消息的跟踪的技术。示例性的即时通信系统是例如基于使用Java(—种用于撰写跨平台应用软件的面向对象的程序设计语言)开发并且以Dubbo框架的远程方法调用作为API调用的即时通信系统。众所周知,Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用)方案和SOA(面向服务体系结构)服务治理方案。在本发明的示例性实施例中,Dubbo框架用于在不同进程中的服务调用,S卩,远程方法调用方式的API调用。[0038]图1示出了示例性即时通信系统100中的典型消息传递场景,其中,消息通过作为API调用方式之一的方法调用的方式进行传递。为了便于描述,在本发明的示例性实施例中,均以方法调用作为API调用的示例方式进行说明。[0039]在图1所示的示例中,该示例性即时通信系统100包括例如两个不同的应用模块103和105,它们在运行时为两个独立的进程。在应用模块103中包含例如两个模块:接入点服务模块1031和转发服务模块1033。在应用模块105中包含例如两个模块:消息发送服务模块1051和消息接收服务模块1053。[0040]在该示例性的消息传递场景中,消息由消息发送客户端101发出,经过应用模块103内所包含的接入点服务模块1031和转发服务模块1033,到达应用模块105内所包含的消息发送服务模块1051,最终的目的地是应用模块105内所包含的消息接收服务模块1053。[0041]在此,应用模块103要调用应用模块105提供的服务。具体地,应用模块103内的接入点服务模块1031在同一个线程中调用应用模块103内的转发服务模块1033所提供的转发服务;接下来,转发服务模块1033通过远程方法调用来调用应用模块105内的消息发送服务模块1051所提供的消息发送服务;然后,消息发送服务模块1051在一个新的线程中调用消息接收服务模块1053所提供的消息接收服务。[0042]本领域技术人员可以理解,图1所示的即时通信系统的消息传递场景仅为示意性的,而非限制性的。在实践中,能够应用本发明的即时通信系统根据实际需求可以包括任意多个应用模块,每个应用模块可以包括任意多个不同的服务模块。[0043]本发明的技术方案意在解决例如上述消息传递场景中的消息传递跟踪问题。消息传递跟踪的目的是当用户反馈某条消息没有收到时,利用消息传递跟踪的记录数据判断出消息具体当前第1页1 2 3 4 
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1