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

文档序号:9420231阅读:来源:国知局
切面I的拦截。如前所述,消息通过方法调用的方式进行传递,当消息从消息发送客户端401发出后,第一个被调用的就是接入点服务模块4031所提供的接入点服务。通过针对接入点服务模块4031所提供的接入点服务的方法调用,使消息能够到达接入点服务模块4031。根据本发明示例性实施例,在消息(即,调用)到达接入点服务模块4031之前,消息跟踪切面I利用AOP的切面技术通过拦截装置201-1自动拦截此调用,之后通过处理装置203-1在消息跟踪切面I中进行处理。具体地,由于接入点服务模块4031是第一个被调用的服务,因而在消息跟踪切面I处通过获取单元2031-1首先生成该消息的标识,例如,消息的UUID。然后通过记录单元2033-1将该消息的标识、消息的内容(例如,消息类型,发送者、接收者、消息的文本信息、当前时间等)、以及接入点服务模块4031的标识(例如,接入点服务模块的全类名和相应的方法签名等)等记录于例如日志文件或数据库等中,以指示该消息已经到达了接入点服务模块4031。此外,为了使下一服务模块能够获取例如消息的标识以确定消息是否能够到达下一服务模块,消息跟踪切面I还通过存储单元2035-1对消息的UUID进行存储。由于接入点服务模块4031将在同一个线程中调用转发服务模块4033所提供的转发服务,所以如前所述,可以使用Java中的ThreadLocal来实现针对同一进程中的同一线程的方法调用。具体地,可以利用Java中的ThreadLocal.set O)方法调用,将消息的标识UUID放入ThreadLocal中。当在消息跟踪切面I处完成对消息的上述处理时,调用流程会重新回到接入点服务模块4031,S卩,消息会自动到达接入点服务模块4031。消息由消息发送客户端401发送至接入点服务模块4031被消息跟踪切面I拦截的处理流程如图5所示,其中非斜体字和实线箭头表示正常流程,斜字体和点划线箭头表示根据本发明示例性实施例的消息传递跟踪方案的处理流程。
[0073]图6示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的应用模块403内的转发服务模块4033的消息传递跟踪的处理流程图。
[0074]转发服务模块4033的消息跟踪主要是利用消息跟踪切面I和消息跟踪切面2的拦截。结合针对图5的描述,在消息跟踪切面I处的处理完成后,调用流程会重新回到接入点服务模块4031。当消息被接入点服务模块4031处理完后,接入点服务模块4031会通过方法调用把消息传递给转发服务模块4033来处理。同时为了跟踪该消息是否会顺利的到达转发服务模块4033,需要把消息的标识从消息跟踪切面I传递给消息跟踪切面2。如前所述,因为接入点服务模块4031是在同一个线程中调用转发服务模块4033所提供的转发服务,所以在如前针对图5所述在消息跟踪切面I处,利用Java中的ThreadLocal (即,ThreadLocal.set O)方法调用将消息的标识UUID放入ThreadLocal。之后,在接入点服务模块4031调用转发服务时,在调用到达转发服务模块4033之前,消息跟踪切面2利用AOP切面技术通过拦截装置201-2把此调用拦截下来,以便通过处理装置203-2在消息跟踪切面2中进行处理。因为是在同一个线程中被调用,所以在消息跟踪切面2中可以通过获取单元2031-2将之前在消息跟踪切面I中通过存储单元2035-1放入ThreadLocal的消息UUID再次利用ThreadLocal(即,ThreadLocal.get O)方法调用取出。然后通过记录单元2033-2将该消息的标识、消息的内容(例如,消息类型,发送者、接收者、消息的文本信息、当前时间等)、以及转发服务模块4033的标识(例如,转发服务模块的全类名和相应的方法签名等)等记录于例如日志文件或数据库等中,以指示该消息已经到达了转发服务模块4033。此外,为了使下一服务模块能够获取例如消息的标识以确定消息是否能够到达下一服务模块,消息跟踪切面2还通过存储单元2035-2对消息的UUID进行存储。由于转发服务模块4033将利用例如Dubbo框架在不同的进程中调用消息发送服务模块4051所提供的消息发送服务,所以,可以利用Dubbo中的RpcContext(即,RpcContext.getContext ().setAttachment O)方法调用,将消息的UUID放入RpcContext中。当在消息跟踪切面2处完成对消息的上述处理时,调用流程会重新回到转发服务模块4033,S卩,消息会自动到达转发服务模块4033。消息在被消息跟踪切面I拦截之后由接入点服务模块4031传递至转发服务模块4033被消息跟踪切面2拦截的处理流程如图6所示,其中非斜体字和实线箭头表示正常流程,斜字体和点划线箭头表示根据本发明示例性实施例的消息传递跟踪方案的处理流程。
[0075]图7示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的应用模块405内的消息发送服务模块4051的消息传递跟踪的处理流程图。
[0076]消息发送服务模块4051的消息跟踪主要是利用消息跟踪切面2和消息跟踪切面3的拦截。结合针对图6的描述,在消息跟踪切面2处的处理完成后,调用流程会重新回到转发服务模块4033。当消息被转发服务模块4033处理完后,转发服务模块4033会通过方法调用把消息传递给消息发送服务模块4051来处理。同时为了跟踪该消息是否会顺利的到达消息发送服务模块4051,需要把消息的标识从消息跟踪切面2传递给消息跟踪切面
3。如前所述,因为转发服务模块4033利用了 Dubbo框架在不同的进程中调用消息发送服务模块4051所提供的消息发送服务,所以在如前针对图6所述在消息跟踪切面2中,利用Dubbo 中的 RpcContext (即,RpcContext.getContext ().setAttachment ())方法调用将消息的UUID放入RpcContext。之后,在转发服务模块4033调用消息发送服务时,同样在调用到达消息发送服务模块4051之前,消息跟踪切面3利用AOP切面技术通过拦截装置201-3把此调用拦截下来,以便通过处理装置203-3在消息跟踪切面3中进行处理。因为在该实施例中利用了 Dubbo框架在不同的进程中被调用,所以在消息跟踪切面3中可以通过获取单元2031-3把之前在消息跟踪切面2中通过存储单元2035-2放入RpcContext的消息UUID 再次利用 RpcContext (即,RpcContext.getContext ().getAttachment ())方法调用取出。然后通过记录单元2033-3将该消息的标识、消息的内容(例如,消息类型,发送者、接收者、消息的文本信息、当前时间等)、以及消息发送服务模块4051的标识(例如,消息发送服务模块的全类名和相应的方法签名等)等记录于例如日志文件或数据库等中,以指示该消息已经到达了消息发送服务模块4051。此外,为了使下一服务模块能够获取例如消息的标识以确定消息是否能够到达下一服务模块,消息跟踪切面3还通过存储单元2035-3对消息的UUID进行存储。由于消息发送服务模块4051是在一个新的线程中(启动了一个子线程)调用消息接收服务模块4053的,所以在消息跟踪切面3中,可以利用Java中的InheritableThreadLocal (即,InheritableThreadLocal.set ())方法调用把消息的 UUID放入InheritableThreadLocal中。当在消息跟踪切面3处完成对消息的上述处理时,调用流程会重新回到消息发送服务模块4051,S卩,消息会自动到达消息发送服务模块4051。消息在被消息跟踪切面2拦截之后由转发服务模块4033传递至消息发送服务模块4051被消息跟踪切面3拦截的处理流程如图7所示,其中非斜体字和实线箭头表示正常流程,斜字体和点划线箭头表示根据本发明示例性实施例的消息传递跟踪方案的处理流程。
[0077]图8示出了根据本发明示例性实施例的针对在图4的示例性消息传递场景中的应用模块405内的消息接收服务模块4053的消息传递跟踪的处理流程图。
[0078]消息接收服务模块4053的消息跟踪主要是利用消息跟踪切面3和消息跟踪切面4的拦截。结合针对图7的描述,在消息跟踪切面3处的处理完成后,调用流程会重新回到消息发送服务模块4051。当消息被消息发送服务模块4051处理完后,消息发送服务模块4051会通过方法调用把消息传递给消息接收服务模块4053来处理。同时为了跟踪刚刚那条消息是否会顺利的到达消息接收服务模块4053,需要把消息的标识从消息跟踪切面3传递给消息跟踪切面4。如前所述,因为消息发送服务模块4051是在一个新的线程中(启动了一个子线程)调用消息接收服务模块4053的,所以在消息跟踪切面3中,利用Java中的InheritableThreadLocal (即,InheritableThreadLocal.set ())方法调用把消息的 UUID放入InheritableThreadLocal。之后,在消息发送服务模块4051调用消息接收服务时,同样在调
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1