一种提高消息服务器处理效率的方法

文档序号:7962822阅读:226来源:国知局
专利名称:一种提高消息服务器处理效率的方法
技术领域
本发明涉及J2EE应用服务器,特别是涉及JMS消息服务器,主要应用在电信网络管理领域。
背景技术
近十几年,电信网络管理技术飞速发展。J2EE(Java 2 EnterpriseEdition)应用服务器在电信网络管理中的使用日趋广泛,JMS(JavaMessaging Service)消息服务器是J2EE应用服务器的一个重要组成部分,通常用在异步处理上。在电信网络管理领域往往需要实时处理大量的异步上报的数据,则容易出现性能瓶颈。
通常使用J2EE应用服务器技术构建的电信网管使用JMS的方式如下接收到网元上报的信息,转换为一定的格式,然后发送到消息主题上。网元上报的数据的大小通常是变化的,有些小,有些大。将这些消息转换成JMS消息的时是作为JMS消息的有效载荷,会导致JMS消息大小变化。在消息比较小的情况下,通过网络发送到消息服务器上进行处理的时候,消息太小会导致网络调用频繁。JMS消息服务器接收到消息后,需要对每条消息进行处理,因此处理负担也增加。
基于目前一些应用服务器中JMS的实现,如果能提出一种打包发送的方法,将多条消息合并到一条消息里面,就可以大幅提供JMS消息的发送和接收效率以及JMS消息服务器的处理效率。目前还没有查到使用类似提高JMS处理效率的方法。

发明内容
本发明所要解决的技术问题是提供一种提高消息服务器处理效率的方法,解决现有应用服务器的JMS实现技术没有对消息进行预处理,不能进打包发送,处理效率较低的技术问题。
为达到上述目的,本发明提供了一种提高消息服务器处理效率的方法,其特点在于,在消息发送端,打包模块对相同信息源发出的类似的原始消息打包到一个打包消息中,并将所述打包消息经消息服务器发送到消息接收端,在消息接收端通过解包模块将所述打包消息还原出所述原始消息,并将所述原始消息传递给消息接收者。
上述的方法,其特点在于,通过将所述打包模块和所述解包模块分别设置在所述消息服务器的发送接口和接收接口的内侧,使所述消息服务器保持对外暴露标准的接口。
上述的方法,其特点在于,通过将所述打包模块和所述解包模块分别设置在所述消息服务器的发送接口和接收接口的外侧,使对消息的打包和解包能适用于不同的消息服务器。
上述的方法,其特点在于,所述消息发送端的处理流程进一步包括如下步骤步骤A,用户获取所述发送接口的信息,同时为用户创建一个延时任务;步骤B,在达到所述延时任务的延时后,所述延时任务启动,为用户创建缓存队列和定时任务;步骤C,在用户利用所述发送接口发送原始消息的过程中,如果所述延时任务已经启动,则所述原始消息被存储到所述缓存队列中;如果所述延时任务没有启动,则直接将所述原始消息发送到所述消息服务器;步骤D,在所述定时任务启动后定时去读取所述缓存队列中的原始消息,并将所述缓存队列中所有的原始消息打包成一个打包消息,然后将所述打包消息发送到所述消息服务器。
上述的方法,其特点在于,在所述步骤D中所述打包的方式是采用对象序列化到内存,在进行网络传输的时候,只传输内存中的二进制的映像。
上述的方法,其特点在于,在所述步骤D中,对内存中的数据再实施通用的压缩算法进行压缩后传输,进一步提供传送效率。
上述的方法,其特点在于,在所述步骤D中,通过标准位区分消息是原始消息还是打包消息,还通过标准位区分消息是否经过了压缩处理。
上述的方法,其特点在于,对于需要支持过滤器的情况,分析原始消息的消息头,确保对过滤器特性一致的原始消息才打包到一个大的打包消息里面;对于过滤器特性不一致的原始消息则分开打包。
上述的方法,其特点在于,所述消息接收端的处理流程进一步包括如下步骤步骤a,接收端的用户通过所述解包模块在所述消息服务器注册为消息消费者;步骤b,所述解包模块接收到消息后区分收到的消息是原始消息还是打包消息,并将所述原始消息直接传递给对应的消息消费者,将所述打包消息通过对象反序列化的方式还原成原始消息,并将还原的原始消息传递给对应的消息消费者。
上述的方法,其特点在于,在所述步骤b中,如果接收到的消息经过了压缩,则在进行对象反序列化前,先进行解压缩。
本发明的技术效果在于对于生成周期大于延时周期的发生者,消息直接发送到缓存队列,发送效率高;如果原始发送的消息比较小,在一定的网络条件下,如以太网,这种打包发送提高了网络传输的效率;在打包情况下,JMS消息服务器不必对单条原始消息进行处理,提高了JMS消息服务器的处理效率;在打包情况下,消息接收一次可以接收到多个消息,在网络条件下,减少网络传送的次数,提高了处理效率。


图1是本发明方法中的打包、解包在JMS外部实现的示意图;图2是本发明方法中的打包、解包在JMS内部实现的示意图;图3是本发明方法中的获取消息发送者流程图;图4是本发明方法中的消息发送流程图;图5是本发明方法中的定时任务流程图;图6是本发明方法中的注册消息消费者流程图;图7是本发明方法中的消息接收流程图;图8是本发明方法中的JMS接口进行封装示意图。
具体实施例方式
本发明通过对发送的消息进行一种预处理,将需要发送的消息进行打包,提高JMS消息的发送、接收效率和JMS消息服务器的处理效率。
本发明方法的基本设计内容在于打包模块对相同信息源发出的类似信息打包到一个大的JMS消息中,发送到JMS消息服务器。在消息的接收端,解包模块接收到打包的消息后,打包模块还原出原始的消息,将原始的消息再逐条传递给消息接收者。这种实现方式既可以做到JMS消息服务器的实现中,提高JMS处理消息的能力,同时保持对外暴露标准的接口,图2是本发明方法中的打包、解包在JMS内部实现的示意图,如图2所示,消息由消息发送者201开始,依次经消息服务器客户端(发送接口)和打包模块202、消息服务器服务端203、解包模块和消息服务器客户端(接收接口)204,最后到达消息接收者205。
也可以将打包和还原的过程做到JMS消息服务器的外部,进行一层封装,在JMS消息服务器感觉不到的情况下进行,图1是本发明方法中的打包、解包在JMS外部实现的示意图,如图1所示,消息由消息发送者101开始,依次经打包模块102、消息服务器客户端103(发送接口)、消息服务器服务端104、消息服务器客户端105(接收接口)和解包模块106,最后到达消息接收者107。
图1中在JMS消息服务器的外部的方式对于JMS消息服务器没有影响,因而这个方法可以适用于不同的JMS消息服务器,特别是在没有办法改动JMS消息服务器实现的情况下,作为一种优化手段特别有用。对于使用JMS的开发者,使用的也是JMS的消息,相应的发送、接收接口有所变化。
实现本发明方法的详细步骤如下在消息的发送端;第一步用户(指接口的使用者)获取消息发送者接口,在获取发送接口的同时为用户创建一个延时任务。该延时任务为发送者创建一个消息缓存队列和定时任务。该定时任务可以启动一个线程,然后等待一定时间后执行该定时任务;也可以采用通用的定时调度机制,等调度时间到后执行该定时任务。如果延时还未到发送者就被关闭了,则不会为该发送者产生缓存队列和定时任务。图3为获取消息发送者的流程图,该第一步具体包括
步骤301,用户获取消息发送者;步骤302,打包模块为发送者延时创建一个消息缓存队列和定时任务;步骤303,打包模块完成对JMS消息服务器注册。
第二步延时任务的延时到后,任务启动,为发送者创建缓存队列和定时任务。任务执行完毕后,延时任务关闭。
第三步用户(指接口的使用者)通过发送者接口发送消息。如果第一步中的延时已到,缓存消息队列被创建,则消息是发送到分配的本地的缓存中,会很快返回;如果第一步中延时未到,则消息直接发送到JMS消息服务器,图4是消息发送流程图,如图4所示,该第三步包括步骤401,用户通过发送者接口发送消息;步骤402,打包模块收到消息;步骤403,判断延时任务是否执行,是则执行步骤404,否则执行步骤405;步骤404,将消息发送到缓存队列,转到步骤407;步骤405,将消息执行发送到JMS消息服务器;步骤406,到达JMS消息服务器;步骤407,消息发送流程结束。
第四步定时任务启动后定时去读取消息缓存队列中的消息,将队列中的所有消息进行打包成一个大的JMS消息,然后将这个大的打包后的消息发送到JMS服务器,如图5所示。打包的方式是采用对象序列化到内存。在进行网络传输的时候,只传输内存中的二进制的映像。可以对内存中的数据再实施通用的压缩算法进行压缩后传输,进一步提供传送效率。打包消息还是原始消息是通过一个标志位进行区分的。打包消息是否经过了压缩处理,也是通过标准位进行区分的。对于需要支持过滤器的情况,分析消息头,确保对过滤器特性一致的消息才打包到一个大的消息里面;对于过滤器特性不一致的消息则分开打包。如图5的定时任务流程图所示,该第四步具体包括步骤501,定时任务启动;步骤502,定时到;步骤503,到缓存队列中获取消息并进行序列化成到一个byte(比特)二维数组;
步骤504发送到JMS消息服务器服务端。
在消息的接收端第一步用户注册消息消费者。如图6所示,具体包括步骤601,用户注册监听器;步骤602,向解包模块注册消息接收者,解包模块代理接收者注册到JMS消息服务器服务端;步骤603,注册到JMS消息服务器服务端。
第二步解包模块接收到消息后需要区分收到的消息是打包的消息还是原始的消息。区分的方法是使用发送时带的标准位。如果是原始的消息,则将这个消息直接传递给的消息消费者;如果这个是一个打包的消息,则通过对象反序列化的方式还原成原始的消息,将还原后的原始消息传递给的消息消费者,如图7的消息接收流程图所示。如果标准位标识消息经过了压缩,则在进行对象反序列化前,先进行解压缩。图7中具体包括步骤701,开始接收消息;步骤702,解包模块接收到JMS消息;步骤703,判断接收到的JMS消息是否是打包消息,是则执行步骤704,否则执行步骤705;步骤704,将打包消息还原成原始消息传递给消费者,转到步骤706;步骤705,直接将消息传递给消费者;步骤706,消费者处理消息,返回步骤702。
上面描述的优化方法可以作为一种优化的JMS内部实现,也可以通过封装标准的JMS接口,作为JMS外部优化手段在JMS外部实现。我们结合电信网络管理领域的实际情况,给出了一种封装实现,具体如下首先,对JMS定义的接口进行封装,提供封装接口,如图8所示,封装接口802中封装了JMS连接803、JMS会话804、JMS主题/队列805,用户801连接该封装接口802。在标准的JMS接口中,进行一条消息的发送需要经过若干个步骤。通过对于原始接口的封装,简化了流程,同时提供了实施上文描述的优化方法的空间。封装接口分别提供订阅和发布接口。
在消息发送端,1)用户获取消息发送者。
这里可以简化用户对于JMS接口使用,可以通过一个调用完成使用原始接口需要好几个调用才能完成的任务。并且通过java.util.Timer为该接口创建一个延时任务,该延时任务将在几秒后启动,如果用户在延时任务启动之前关闭了消息发送者,则该延时任务被取消。
2)延时任务的延时到。
当延时任务的延时到后,就为该发送者创建一个在内存中的缓存队列和定时任务。这个定时任务现在是通过启动一个线程,然后该线程Sleep(休眠)一段时间后执行该任务来实现。定时任务到后,从缓存队列读取消息,将每个消息序列化,放到一个byte数组里面,整个队列的消息就序列化成一个byte的二维数组。然后将内存中的二维数组作为一个对象,放到JMS的ObjectMessage(对象信息)里面,发送到JMS消息服务器。
3)延时任务未执行时的消息发送。
如果延时任务未到,任务没有得到执行,该发送者的消息队列没有被创建,则消息直接发送到JMS消息服务器。
在消息接收端,1)通过封装接口注册消息接收者。
通过封装接口代理消息接收者注册到JMS消息服务器。这个代理接收者接收到消息后再将消息转给用户的消息接收者。
2)代理接收者接收消息首先确定消息是否是打包的消息,如果是打包的消息,则将消息进行反序列化重建出原始的消息,将原始的消息传递给用户的消息接受者。这样一个消息就从消息源路由到消息的目的地了。
由上述可知,使用本发明方法具有如下有益效果对于生成周期大于延时周期的发生者,消息直接发送到缓存队列,发送效率高;如果原始发送的消息比较小,在一定的网络条件下,如以太网,这种打包发送提高了网络传输的效率;在打包情况下,JMS消息服务器不必对单条原始消息进行处理,提高了JMS消息服务器的处理效率;在打包情况下,消息接收一次可以接收到多个消息,在网络条件下,减少网络传送的次数,提高了处理效率。
以上所述仅为本发明的较佳实施例,并非用来限定本发明的实施范围;凡是依本发明所作的等效变化与修改,都被本发明的专利范围所涵盖。
权利要求
1.一种提高消息服务器处理效率的方法,其特征在于,在消息发送端,打包模块对相同信息源发出的类似的原始消息打包到一个打包消息中,并将所述打包消息经消息服务器发送到消息接收端,在消息接收端通过解包模块将所述打包消息还原出所述原始消息,并将所述原始消息传递给消息接收者。
2.根据权利要求1所述的方法,其特征在于,通过将所述打包模块和所述解包模块分别设置在所述消息服务器的发送接口和接收接口的内侧,使所述消息服务器保持对外暴露标准的接口。
3.根据权利要求1所述的方法,其特征在于,通过将所述打包模块和所述解包模块分别设置在所述消息服务器的发送接口和接收接口的外侧,使对消息的打包和解包能适用于不同的消息服务器。
4.根据权利要求2或3所述的方法,其特征在于,所述消息发送端的处理流程进一步包括如下步骤步骤A,用户获取所述发送接口的信息,同时为用户创建一个延时任务;步骤B,在达到所述延时任务的延时后,所述延时任务启动,为用户创建缓存队列和定时任务;步骤C,在用户利用所述发送接口发送原始消息的过程中,如果所述延时任务已经启动,则所述原始消息被存储到所述缓存队列中;如果所述延时任务没有启动,则直接将所述原始消息发送到所述消息服务器;步骤D,在所述定时任务启动后定时去读取所述缓存队列中的原始消息,并将所述缓存队列中所有的原始消息打包成一个打包消息,然后将所述打包消息发送到所述消息服务器。
5.根据权利要求4所述的方法,其特征在于,在所述步骤D中所述打包的方式是采用对象序列化到内存,在进行网络传输的时候,只传输内存中的二进制的映像。
6.根据权利要求5所述的方法,其特征在于,在所述步骤D中,对内存中的数据再实施通用的压缩算法进行压缩后传输,进一步提供传送效率。
7.根据权利要求6所述的方法,其特征在于,在所述步骤D中,通过标准位区分消息是原始消息还是打包消息,还通过标准位区分消息是否经过了压缩处理。
8.根据权利要求6所述的方法,其特征在于,对于需要支持过滤器的情况,分析原始消息的消息头,确保对过滤器特性一致的原始消息才打包到一个大的打包消息里面;对于过滤器特性不一致的原始消息则分开打包。
9.根据权利要求2或3所述的方法,其特征在于,所述消息接收端的处理流程进一步包括如下步骤步骤a,接收端的用户通过所述解包模块在所述消息服务器注册为消息消费者;步骤b,所述解包模块接收到消息后区分收到的消息是原始消息还是打包消息,并将所述原始消息直接传递给对应的消息消费者,将所述打包消息通过对象反序列化的方式还原成原始消息,并将还原的原始消息传递给对应的消息消费者。
10.根据权利要求9所述的方法,其特征在于,在所述步骤b中,如果接收到的消息经过了压缩,则在进行对象反序列化前,先进行解压缩。
全文摘要
本发明公开了一种提高消息服务器处理效率的方法,其特点在于,在消息发送端,打包模块对相同信息源发出的类似的原始消息打包到一个打包消息中,并将所述打包消息经消息服务器发送到消息接收端,在消息接收端通过解包模块将所述打包消息还原出所述原始消息,并将所述原始消息传递给消息接收者。本发明通过对发送的消息进行一种预处理,将需要发送的消息进行打包,提高了JMS消息的发送、接收效率和JMS消息服务器的处理效率。
文档编号H04Q11/00GK101094167SQ20061008936
公开日2007年12月26日 申请日期2006年6月21日 优先权日2006年6月21日
发明者魏国强, 方马, 田珂 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1