一种持久化消息的发布方法及系统的制作方法
【专利摘要】本发明公开了一种持久化消息的发布方法及系统。该方法包括:持久化消息读取装置读取持久化到非易失性存储设备上的持久化消息,持久化消息发布装置将所述持久化消息存入消息队列中;在将持久化消息存入消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态;消息队列中的消息被消息转发单元提取后,向持久化消息发布装置发送通知事件,通知所述持久化消息发布装置终止等待;持久化消息发布装置从等待语句的下一条语句继续执行,继续往消息队列发布消息。本发明可以保证数据交换服务器在大量接收、转发消息的情况下,持久化消息和实时消息能够得到高效、可靠的传输,提高持久化消息传送的实时性。
【专利说明】一种持久化消息的发布方法及系统
【技术领域】
[0001]本发明涉及数据通讯领域,具体涉及一种持久化消息的发布方法及系统。
【背景技术】
[0002]在数据交换中心的消息中间件工作机制中,通常有一台数据交换服务器连接多台数据交换客户端,多台数据交换客户端之间通过数据交换服务器进行消息传输和数据交换。这种机制消息发送端和消息接收端通过数据交换服务器实现解耦,消息发送者和消息接收者不用同时在线也可进行消息传输。
[0003]数据交换服务器在收到消息发送端的实时消息时,将实时消息存入接收端对应的消息队列中,再将消息转发给消息接收端。为了保证消息传输的可靠性,数据交换服务器会将消息保存在非易失性存储设备,在出现掉电、系统异常崩溃等突发情况时,数据交换服务器重新启动能够加载持久化到非易失性存储设备的消息,将其转发给相应的消息接收端。将消息从非易失性存储设备读入内存然后存入消息队列的过程,称为持久化消息发布。
[0004]数据交换服务器普遍支持多路复用技术,所谓多路复用是指发送端在群发消息(将消息发给多个接收端或广播发送)时,只向数据交换服务器发送一条消息,由数据交换服务器根据消息路由结果分别将消息转发给多个消息接收端,这种方式减少了发送端向数据交换服务器发送的消息量,节约网络带宽,提高群发的效率。如图1所示,发送端发送一条群发消息,只需向数据交换服务器发送一条消息,服务器再将该消息转发给多个接收端(图1所示为三个接收端)。多路复用技术使得数据交换服务器需要向消息接收端转发的消息数量远远大于从消息发送端接收的消息数量,其结果是消息转发的速度明显比消息接收的速度慢很多。消息队列中的消息得不到及时转发,最终导致消息队列被占满,部分消息只在非易失性存储设备中保存,未被存入消息队列中。在消息队列中的消息被转发之后,会释放其占用的存储空间,这时需要重新将持久化的消息读入内存,然后将其发布到消息队列中进行转发。
[0005]在持久化消息发布的过程中,通常数据交换服务器的消息接收装置还在工作,还在接收消息发送端发送的消息,期间还会出现队列忙的情况。图2为现有技术发布持久化消息的工作原理示意图,现有技术中,在持久化消息发布过程中如果出现消息队列为忙的情况,通常必须睡眠等待一段指定的时间,睡眠超时后再去获取消息队列的状态;如果队列为忙就继续睡眠等待,超时后再获取消息队列状态,如此反复,直到消息队列为空闲然后继续发布,如步骤201-208所示。如图2步骤204所示,睡眠等待机制必须等到超时才能去查询消息队列状态,如果睡眠时间设定为60秒,必须等待60秒超时才去查询消息队列的状态。这种通过反复获取消息队列是否为空闲然后发布的方法存在如下问题:即使消息队列已经空闲也需本次等待超时才去获取消息队列的空闲状态,才能启动消息发布程序,如睡眠超时时间设为60秒,在等待了 5秒后消息队列中的消息被取走,也需再等55秒才去查询消息队列的状态,这就不能最大化的提高消息转发的实时性。虽然可以通过缩短等待时间,增加查询的频率尽量提高消息转发的实时性,但是等待时间过短,如果消息队列长时间处于忙状态,频繁查询消息队列的状态并无意义,反而会影响性能。因此,现有技术如果存在大量消息发送(包括实时消息和持久化消息)时,发布持久化消息效率低,消息转发实时性差。
【发明内容】
[0006]针对现有技术中所存在的问题,为了解决现有技术在发布大量持久化消息时周期性等待查询消息队列的状态而引起的效率低,消息转发实时性差的问题,本发明的目的是提供一种持久化消息的发布方法及系统,该方法及系统在持久化消息发布过程中引入了等待、通知机制,通过事件触发持久化消息发布过程,保证数据交换服务器在大量接收、转发消息的情况下,保证消息高效、可靠的传输,同时也提高了持久化消息传送的实时性。
[0007]—种持久化消息的发布方法,包括以下步骤:
[0008](I)消息接收装置接收消息发送端发送到数据交换服务器的实时消息,并将所述实时消息持久化到非易失性存储设备;
[0009](2)持久化消息读取装置读取持久化到非易失性存储设备上的持久化消息;
[0010](3)持久化消息发布装置将所述持久化消息存入消息队列中;在将持久化消息存入消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态,等待消息队列发送的空闲通知;
[0011](4)消息转发单元提取消息队列中的消息后,将消息转发给消息接收端,消息队列将向持久化消息发布装置发送通知事件,通知所述持久化消息发布装置终止等待;
[0012](5)持久化消息发布装置从等待语句的下一条语句继续执行,继续往消息队列发布消息。
[0013]进一步,每个消息接收端对应唯一的持久化消息发布装置,用于向所述消息接收端对应的消息队列发布持久化消息。
[0014]进一步,每个消息接收端对应唯一的消息队列,用于存放消息发送端发送的实时消息和持久化消息发布装置发布的持久化消息。
[0015]进一步,步骤(3)中,所述持久化消息发布装置暂停运行并进入等待状态时,持久化消息发布装置将会一直等待,直到接收到消息队列的空闲通知,继续发布持久化消息。
[0016]进一步,步骤(3)中,消息转发单元在从消息队列提取消息并释放出内存空间后,消息队列立即向持久化消息发布装置发送空闲通知,通知持久化消息发布装置可以继续向消息队列发布持久化消息。
[0017]更进一步,步骤(3)中,消息转发单元在从消息队列提取消息之前将锁定消息队列,在从消息队列提取消息之后将解除对消息队列的锁定。
[0018]本发明还提供了一种持久化消息的发布系统,包括数据交换服务器、消息发送端、消息接收端,所述的数据交换服务器包括以下装置:
[0019]消息接收装置:用于接收消息发送端发送到数据交换服务器的实时消息,并将所述实时消息持久化到非易失性存储设备;
[0020]持久化消息读取装置:用于读取持久化到非易失性存储设备上的持久化消息;
[0021]持久化消息发布装置:用于将持久化消息读取装置读取的持久化消息发布到消息队列,在将持久化消息存入消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态,等待消息队列发送的空闲通知;
[0022]消息队列:用于在内存中存放消息接收端有待转发的实时消息和持久化消息,消息在被提取时会向持久化消息发布装置发送空闲通知;
[0023]消息转发单元:用于从消息队列提取消息并将消息转发给消息接收端。
[0024]进一步,该系统还包括消息路由装置,用于根据路由设置确定消息接收装置接收的实时消息的一个或多个接收端,并将所述实时消息存入对应消息接收端空闲的消息队列中。
[0025]进一步,每个消息接收端对应唯一的持久化消息发布装置及唯一的消息队列。
[0026]本发明的效果在于:本发明所述的方法及系统在持久化消息发布过程中引入事件触发机制,消息队列中的消息被提取释放出存储空间后,消息队列立即向持久化消息发布装置发送空闲通知,通知持久化消息发布装置可以继续向消息队列发布持久化消息。通过使用本发明的方法,保证数据交换服务器在大量接收、转发消息的情况下,持久化消息和实时消息高效、可靠的传输,同时也提高了持久化消息传送的实时性。
【专利附图】
【附图说明】
[0027]图1为多路复用技术的工作原理示意图;
[0028]图2为现有技术发布持久化消息的工作原理示意图;
[0029]图3为本发明整体工作原理图;
[0030]图4为本发明一种持久化消息的发布系统【具体实施方式】的系统结构图;
[0031]图5为本发明一种持久化消息的发布方法【具体实施方式】的流程图。
【具体实施方式】
[0032]下面结合附图和【具体实施方式】对本发明作进一步描述。
[0033]本发明所描述的一种持久化消息的发布系统,如图3所示,其包括:数据交换服务器、消息交换客户端,所述的消息交换客户端包括消息发送端、消息接收端。
[0034]图4是根据本发明所述的一种持久化消息的发布系统的实施例的装置示意图。其中数据交换服务器41是本发明的核心部分,消息发送端42和消息接收端43用于描述本发明,所述的数据交换服务器41包括以下装置:
[0035]消息接收装置411,该装置用于接收消息发送端42发送到数据交换服务器41的实时消息,并将所述实时消息持久化到非易失性存储设备。
[0036]消息路由装置412,该装置用于根据路由设置确定接收的实时消息的一个或多个消息接收端,并将所述实时消息存入对应消息接收端空闲的消息队列中。
[0037]持久化消息读取装置413,用于读取持久化到非易失性存储设备上的持久化消息。
[0038]持久化消息发布装置414,用于将持久化消息读取装置读取的持久化消息发布到对应消息接收端的消息队列,在将持久化消息存入对应消息接收端的消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态,等待消息队列发送的空闲通知。
[0039]消息队列415,用于在内存中存放消息接收端有待转发的实时消息和持久化消息,消息在被提取时会向持久化消息发布装置发送空闲通知。[0040]消息转发单元416,用于从消息队列415提取消息并将消息转发给消息接收端43。
[0041]本实施例中,每个消息接收端对应唯一的持久化消息发布装置及唯一的消息队列。
[0042]图5示出了根据本发明所述的一种持久化消息的发布方法的一个实施例的流程图,包括以下步骤:
[0043]S501、从非易失性存储设备上加载持久化的消息列表;
[0044]S502、如果得到的所述消息列表为空,表示没有持久化的消息,则进入步骤S510 ;否则进入步骤S503;
[0045]S503、持久化消息读取装置读取非易失性存储设备上的第一条持久化消息;
[0046]S504、持久化消息发布装置判断消息队列是否为忙,如果消息队列为忙则执行步骤S505 ;否则执行步骤S507 ;
[0047]S505、持久化消息发布装置暂停运行并进入等待状态,等待消息队列发送的空闲通知;
[0048]S506、持久化消息发布装置接收到消息队列的空闲通知后继续程序的执行过程,进入步骤S507 ;
[0049]S507、持久化消息发布装置锁定消息队列,然后将持久化消息放入所述消息队列中,放入完成后解除对消息队列的锁定;锁定消息队列后,禁止其他程序访问该消息队列;
[0050]S508、持久化消息发布装置判断非易失性存储设备上是否有下一条未发布的消息,如果有未发布的消息则执行步骤S509 ;否则执行步骤S510 ;
[0051]S509、持久化消息读取装置读取非易失性存储设备上的下一条持久化消息;然后进入步骤S504 ;
[0052]S510、持久化消息发布装置完成本次消息发布,停止运行。
[0053]本实施例中,每个消息接收端对应唯一的持久化消息发布装置,用于向所述消息接收端发布持久化消息。每个消息接收端对应唯一的消息队列,用于在内存中存放消息发送端发送的实时消息和持久化消息发布装置发布的持久化消息。
[0054]本发明所述的一种持久化消息的发布方法及系统并不限于【具体实施方式】中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
【权利要求】
1.一种持久化消息的发布方法,包括以下步骤: (1)消息接收装置接收消息发送端发送到数据交换服务器的实时消息,并将所述实时消息持久化到非易失性存储设备; (2)持久化消息读取装置读取持久化到非易失性存储设备上的持久化消息; (3)持久化消息发布装置将所述持久化消息存入消息队列中;在将持久化消息存入消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态,等待消息队列发送的空闲通知; (4)消息转发单元提取消息队列中的消息后,将消息转发给消息接收端,消息队列将向持久化消息发布装置发送通知事件,通知所述持久化消息发布装置终止等待; (5)持久化消息发布装置从等待语句的下一条语句继续执行,继续往消息队列发布消肩、O
2.如权利要求1所述的一种持久化消息的发布方法,其特征在于:每个消息接收端对应唯一的持久化消息发布装置,用于向所述消息接收端对应的消息队列发布持久化消息。
3.如权利要求1所述的一种持久化消息的发布方法,其特征在于:每个消息接收端对应唯一的消息队列,用于存放消息发送端发送的实时消息和持久化消息发布装置发布的持久化消息。
4.如权利要求1、2或3所述的一种持久化消息的发布方法,其特征在于:步骤(3)中,所述持久化消息发布装置暂停运行并进入等待状态时,持久化消息发布装置将会一直等待,直到接收到消息队列的空闲通知,继续发布持久化消息。
5.如权利要求1、2或3所述的一种持久化消息的发布方法,其特征在于:步骤(3)中,消息转发单元在从消息队列提取消息并释放出内存空间后,消息队列立即向持久化消息发布装置发送空闲通知,通知持久化消息发布装置可以继续向消息队列发布持久化消息。
6.如权利要求1、2或3所述的一种持久化消息的发布方法,其特征在于:步骤(3)中,消息转发单元在从消息队列提取消息之前将锁定消息队列,在从消息队列提取消息之后将解除对消息队列的锁定。
7.如权利要求1所述的一种持久化消息的发布方法,其特征在于该方法包括以下步骤: 步骤1、从非易失性存储设备上加载持久化的消息列表; 步骤2、如果得到的消息列表为空,表示没有持久化的消息,则进入步骤10 ;否则进入步骤3; 步骤3、持久化消息读取装置读取非易失性存储设备上的第一条持久化消息; 步骤4、持久化消息发布装置判断消息队列是否为忙,如果消息队列为忙则执行步骤.5 ;否则执行步骤7 ; 步骤5、持久化消息发布装置暂停运行并进入等待状态,等待消息队列的空闲通知;步骤6、持久化消息发布装置接收到消息队列的空闲通知后继续程序的执行过程,进入步骤7 ; 步骤7、持久化消息发布装置锁定消息队列,然后将持久化消息放入所述消息队列中,放入完成后解除对消息队列的锁定; 步骤8、持久化消息发布装置判断非易失性存储设备上是否有下一条未发布的消息,如果有未发布的消息则执行步骤9 ;否则执行步骤10 ; 步骤9、持久化消息读取装置读取非易失性存储设备上的下一条持久化消息;然后进入步骤4 ; 步骤10、持久化消息发布装置完成本次消息发布,停止运行。
8.一种持久化消息的发布系统,包括数据交换服务器、消息发送端、消息接收端,其特征在于,所述的数据交换服务器包括以下装置: 消息接收装置:用于接收消息发送端发送到数据交换服务器的实时消息,并将所述实时消息持久化到非易失性存储设备; 持久化消息读取装置:用于读取持久化到非易失性存储设备上的持久化消息; 持久化消息发布装置:用于将持久化消息读取装置读取的持久化消息发布到消息队列,在将持久化消息存入消息队列之前,判断消息队列是否为忙,如果消息队列为忙,持久化消息发布装置将会暂停运行并进入等待状态,等待消息队列发送的空闲通知; 消息队列:用于在内存中存放消息接收端有待转发的实时消息和持久化消息,消息在被提取时会向持久化消息发布装置发送空闲通知; 消息转发单元:用于从消息队列提取消息并将消息转发给消息接收端。
9.如权利要求8所述的一种持久化消息的发布系统,其特征在于:该系统还包括消息路由装置,用于根据路由设置确定消息接收装置接收的实时消息的一个或多个消息接收端,并将所述实时消息存入对应消息接收端空闲的消息队列中。
10.如权利要求8或9所述 的一种持久化消息的发布系统,其特征在于:每个消息接收端对应唯一的持久化消息发布装置及唯一的消息队列。
【文档编号】H04L12/58GK103428072SQ201210162372
【公开日】2013年12月4日 申请日期:2012年5月23日 优先权日:2012年5月23日
【发明者】乐以长, 封素石, 张云 申请人:北京大学, 北大方正集团有限公司, 方正国际软件(北京)有限公司