一种从多队列节点获取消息的方法及系统的制作方法

文档序号:6336539阅读:127来源:国知局
专利名称:一种从多队列节点获取消息的方法及系统的制作方法
技术领域
本发明属于数据处理技术领域,尤其涉及一种从多队列节点获取消息的方法及系统。
背景技术
在数据集成场景中,需要从一个集成节点去处理另一节点上的η个队列节点Q1、 Q2、…、Qn,如图1所示,这η个队列为Java消息服务(Java Message Service, JMS)队列,每个队列节点中可能存在若干消息,也可能为空,负责接收消息的端点需要遍历每一个队列节点,等待一段时间后,再做接收消息操作处理,对目标队列节点做接收消息处理时, 每次只能接收一条消息。其接收消息的过程为整体上顺序循环遍历各个队列节点,对每个队列节点等待一段较长的时间τ (例如5秒),然后再去做接收消息处理。如果接收到消息,则等待一段较短的时间t (例如0. 05秒)去继续接收消息,直到接收处理的次数达到一个额定值S (例如 1000次),或者在t时间内未接收到消息,则转至下个队列节点继续进行接收消息处理。当队列节点的数目较少时,接收消息的过程不会出现明显问题,但是随着业务的发展,所需集成的业务数据类型增多,队列节点η的数目增加,可达20左右,不妨假设η = 20时,而队列节点中只有Q19中有消息,则在接收消息时就必须先遍历Ql Q18共18个队列节点,花费ISXk = 90s时间,才能开始处理Q19中的消息,消息处理速度慢,效率低。

发明内容
本发明实施例的目的在于提供一种从多队列节点获取消息的方法,旨在解决现有技术中随着集成的业务数据类型的增多,队列节点η的数目增加,导致消息处理速度慢,效率低的问题。本发明实施例是这样实现的,一种从多队列节点获取消息的方法,所述方法包括下述步骤创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。本发明实施例的另一目的在于提供一种从多队列节点获取消息的系统,所述系统包括创建模块,用于创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;
第一队列处理模块,用于当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;以及第二队列处理模块,用于当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。在本发明实施例中,创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理,减少对队列节点的消息处理时的等待时间,提高了传输效率。


图1是现有技术提供的节点遍历示意图;图2是本发明实施例提供的从多队列节点获取消息的方法的实现流程图;图3是本发明实施例提供的创建两个同步队列的实现流程图;图4是本发明实施例提供的当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列的步骤的实现流程图;图5是本发明实施例提供的当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理的步骤的实现流程图;图6是本发明实施例提供的从多队列节点中获取消息的系统的结构框图;图7是本发明实施例提供的创建模块的结构框图;图8是本发明实施例提供的第一队列处理模块的结构框图;图9是本发明实施例提供的第二队列处理模块的结构框图;图10是本发明实施例提供的节点遍历示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在本发明实施例中,采用两个同步队列对原始队列的队列节点进行分配调度,减少处理接收消息时的等待时间,提高效率。本发明实施例的目的在于提供一种从多队列节点获取消息的方法,所述方法包括下述步骤创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。本发明实施例的另一目的在于提供一种从多队列节点获取消息的系统,所述系统包括创建模块,用于创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节占.
^ \\\ 第一队列处理模块,用于当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;以及第二队列处理模块,用于当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。在本发明实施例中,创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。实施例一图2示出了本发明第一实施例提供的从多队列节点获取消息的方法的实现流程, 其具体的步骤如下所述在步骤SlOl中,创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节
点ο在本发明实施例中,该创建两个同步队列的过程为预处理过程,其主要是将原始队列中的队列节点分为两部分进行处理,提高处理的效率。在步骤S102中,当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列。在本发明实施例中,由于在预处理过程中,创建两个同步队列时,被分配到第一队列的队列节点为没有包含消息的队列节点,被分配到第二队列的队列节点是包含有消息的队列节点,由于数据传输的实时性,被分配到第一队列的队列节点在下一时刻可能会包含消息,而被分配到第二队列的队列节点在下一时刻可能不会包含消息,上述预先创建的第一队列和第二队列为后续的节点处理带来便利。在步骤S103中,当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。在本发明实施例中,对于包含有消息的队列节点的处理方式与现有的方式类似, 下述有具体的实施例进行描述,在此不再赘述。在本发明实施例中,将原始队列中的队列节点是否包含消息作为分类依据,将原始队列中的队列节点存放到预先创建两个同步队列中,其中,第一队列存放没有消息的队列节点,第二队列存放有消息的队列节点,然后,采用两个处理进程分别对这两个的同步队列进行消息处理,由于减少了队列节点的无用的等待遍历的时间,提高了传输效率,同时采用更加灵活的节点处理方式,提高软件的灵活性。实施例二图3示出了本发明实施例提供的创建两个同步队列的实现流程,其具体的步骤如下所述在步骤S201中,创建两个同步队列,分别记为第一队列和第二队列。在本发明实施例中,创建两个空的同步队列,该同步队列用于存放队列节点,其存放的依据是队列节点是否包含有消息。在步骤S202中,对原始队列中的队列节点进行检测,检测所述队列节点是否有消息存在,是则执行步骤S203,否则执行步骤S204。在步骤S203中,当检测到所述队列节点包含有消息时,将所述对列节点放入所述第二队列。在步骤S204中,当检测到所述队列节点没有包含消息时,将所述对列节点放入所述第一队列。在本发明实施例中,将原始队列中的节点分两个队列进行存放,其应用于多业务类型的集成场景中,即为了解决等待时间过长的问题,而采用本实施例提供的创建两个同步队列的方式,该过程为预处理过程,第一队列和第二队列存放的队列节点是暂时的,随着时间实时变化的。该实施例为执行本发明方案的一个预备工作,其基本是创建两个同步队列的过程。实施例三图4示出了本发明实施例提供的当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列的步骤的实现流程,其具体的步骤如下所述在步骤S301中,当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点。在本发明实施例中,该循环取出第一队列中的队列节点按照先进先出的原则。在步骤S302中,检测取出的所述第一队列中的队列节点是否包含有消息,是则执行步骤S303,否则执行步骤S304。在步骤S303中,当所述队列节点包含有消息时,将所述队列节点放入所述第二队列。在步骤S304中,当所述队列节点不包含消息时,继续将所述队列节点放入所述第一队列。
该实施例是对第一队列中的队列节点进行处理的实现过程,将第一队列中包含消息的队列节点放入第二队列,将第一队列中没有包含消息的队列节点继续放入第一队列。实施例四图5示出了本发明实施例提供的当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理的步骤的实现流程,其具体的步骤如下所述在步骤S401中,当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点。在本发明实施例中,该循环取出第一队列中的队列节点按照先进先出的原则。在步骤S402中,对每个队列节点执行监听操作,监听时间为第一时间。在本发明实施例中,对每个取出的队列节点,首先等待一个较长时间,然后再去进行消息的接收操作,该较长时间为监听时间,即为第一时间,假设为T。在步骤S403中,对监听操作后的队列节点进行消息的接收操作处理。在步骤S404中,判断是否接收到消息,是则执行步骤S405,否则执行步骤S408。在步骤S405中,当从所述队列节点接收到消息时,继续对所述队列节点执行监听操作,所述监听时间为第二时间。在本发明实施例中,当从队列节点接收到消息时,继续进行监听操作,该监听时间为第二时间,不妨设为t。在步骤S406中,对监听操作后的队列节点继续进行消息的接收操作处理。在步骤S407中,判断是否接收到消息,是则执行步骤S409,否则执行步骤S408。在步骤S408中,当在第一时间内没有接收到消息,或在第二时间内没有接收到消息,则将所述队列节点放入第一队列。在本发明实施例中,上述步骤是一个循环的过程,直至消息接收完成。在步骤S409中,判断对所述队列节点的接收消息的次数是否超过预设阈值,是则执行步骤S410,否则执行步骤S405。在本发明实施例中,该接收消息的次数可设置为1000次。在步骤S410中,当对所述队列节点的接收消息的次数超过预设阈值时,将所述队列节点放入第二队列。上述仅为本发明的一个实施例,其具体是对于第二队列的队列节点的处理流程。本发明实施例提供的方案解决了多业务类型集成场景中,减少无用的等待时间, 提高传输效率。实施例五图6示出了本发明实施例提供的从多队列节点中获取消息的系统的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。创建模块11创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点; 第一队列处理模块12当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;第二队列处理模块13当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。上述仅为本发明的一个系统实施例,其各模块的功能如上述方法实施例所述。实施例六作为本发明的一个实施例,图7示出了本发明实施例提供的创建模块的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。同步队列创建模块111创建两个同步队列,分别记为第一队列和第二队列;第一检测模块112对原始队列中的队列节点进行检测,检测所述队列节点是否有消息存在;第一放入模块113当所述第一检测模块112检测到所述队列节点包含有消息时,将所述对列节点放入所述第二队列;第二放入模块114当所述第一检测模块112检测到所述队列节点没有包含消息时,将所述对列节点放入所述第一队列。上述仅为本发明的一个系统实施例,其各模块的功能如上述方法实施例所述。实施例七作为本发明的一个实施例,图8示出了本发明实施例提供的第一队列处理模块的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。第一队列节点取出模块121当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点;第二检测模块122检测取出的所述第一队列中的队列节点是否包含有消息;当所述第二检测模块122检测所述队列节点包含有消息时,第三放入模块123将所述队列节点放入所述第二队列;当所述第二检测模块122检测所述队列节点不包含消息时,第四放入模块IM继续将所述队列节点放入所述第一队列。上述仅为本发明的一个系统实施例,其各模块的功能描述如上述方法实施例所述。实施例八作为本发明的一个具体实施例,图9示出了本发明实施例提供的第二队列处理模块的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。第二队列节点取出模块131当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点;第一监听操作模块132对每个队列节点执行监听操作,监听时间为第一时间;第一消息接收模块133对所述第一监听操作模块132监听操作后的队列节点进行消息的接收操作处理;当所述第一消息接收模块133从队列节点接收到消息时,第二监听操作模块134继续对所述队列节点执行监听操作,所述监听时间为第二时间;第二消息接收模块135对所述第二监听操作模块134监听操作后的队列节点继续进行消息的接收操作处理,直至消息接收完成;第五放入模块136当在第一时间内没有接收到消息,或在第二时间内没有接收到消息,则将所述队列节点放入第一队列;第六放入模块137当对所述队列节点的接收消息的次数超过预设阈值时,将所述队列节点放入第二队列。上述仅为本发明的一个系统实施例,其各模块的功能描述如上述方法实施例所述。实施例九作为本发明的一个具体实施例,以图1所示的示意图为例,假设Ql、Q2. . . Qn均为集成服务器上的消息通道,其中分别负责转发工厂1、工厂2...工厂η的数据。端点则是一个接收端,它订阅了此η个消息通道。它需要去处理这η的消息通道中的消息。现在假设Ql每1个小时会有一条消息需要处理。Q2每分钟有1000条消息需要处理。Q3每分钟有10条消息需要处理。Q4每秒钟有100条消息需要处理。Q5每天有1000条消息需要处理。其他消息通道都没有消息。因为各个消息通道的消息频率和概率是离散分布的。所以如果采用常规方式,很难保证处理不会因为空消息通道和消息密度大的通道占用过多处理时间,从而令其他通道得不到及时处理。而采用本发明实施例提供的技术方案后,可以将该队列中的队列节点分为两类, 包含消息的和不包含消息的,同时将该分类的队列节点分别放入预先创建的同步队列,分别采用不同的策略对同步队列中的节点进行消息处理,提高了数据的传输效率,下述给出一个具体的实施过程参阅图10假设目前Ql Q5中消息数量1.创建两个同步的先进先出(FIFO)队列,分别是第一队列和第二队列;2.遍历Ql Q5,将有消息的Q1、Q4、Q5放入第二队列,没有消息的Q2、Q3放入第一队列;3.监听Ql —段时间tl,接收消息;4.监听Ql —段时间t2,没有收到消息,将Ql放入第一队列,转向处理Q4 ;5.监听Q4 —段时间tl,接收消息;6.监听Q4—段时间t2,接收消息,直到没有消息为止,将Q4放入第一队列,转向处理Q5 ;7.监听Q5 —段时间tl,接收消息;8.监听Q5 —段时间t2,接收消息,直到没有消息为止,将Q5放入第一队列;9.返回步骤2,重新处理。上述仅为本发明的一个具体实施例,在此不用以限制本发明。在本发明实施例中,创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理,减少对队列节点的消息处理时的等待时间,提高了传输效率。采用本发明所述的策略可以有效地将需要处理和无需处理的队列节点分别对待处理,而且可以通过进一步的设置检测次数阈值,避免在某一个节点上消耗过多时间,在大规模多队列节点的集成场景中,采用本发明的策略,可以有效避免过多的等待时间,体现出负载均衡的特点,提高集成的效率。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种从多队列节点获取消息的方法,其特征在于,所述方法包括下述步骤创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。
2.如权利要求1所述的方法,其特征在于,所述创建两个同步队列,分别记为第一队列和第二队列的具体步骤具体包括创建两个同步队列,分别记为第一队列和第二队列; 对原始队列中的队列节点进行检测,检测所述队列节点是否有消息存在; 当检测到所述队列节点包含有消息时,将所述对列节点放入所述第二队列; 当检测到所述队列节点没有包含消息时,将所述对列节点放入所述第一队列。
3.如权利要求1所述的方法,其特征在于,所述当所述第一队列中有队列节点元素时, 循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列的步骤具体包括下述步骤当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点; 检测取出的所述第一队列中的队列节点是否包含有消息; 当所述队列节点包含有消息时,将所述队列节点放入所述第二队列; 当所述队列节点不包含消息时,继续将所述队列节点放入所述第一队列。
4.如权利要求1所述的方法,其特征在于,所述当所述第二队列中有队列节点元素时, 循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理的步骤具体包含下述步骤当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点; 对每个队列节点执行监听操作,监听时间为第一时间; 对监听操作后的队列节点进行消息的接收操作处理;当从所述队列节点接收到消息时,继续对所述队列节点执行监听操作,所述监听时间为第二时间;对监听操作后的队列节点继续进行消息的接收操作处理,直至消息接收完成; 当在第一时间内没有接收到消息,或在第二时间内没有接收到消息,则将所述队列节点放入第一队列;当对所述队列节点的接收消息的次数超过预设阈值时,将所述队列节点放入第二队列。
5.一种从多队列节点获取消息的系统,其特征在于,所述系统包括创建模块,用于创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;第一队列处理模块,用于当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;以及第二队列处理模块,用于当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理。
6.如权利要求5所述的系统,其特征在于,所述创建模块具体包括 同步队列创建模块,用于创建两个同步队列,分别记为第一队列和第二队列;第一检测模块,用于对原始队列中的队列节点进行检测,检测所述队列节点是否有消息存在;第一放入模块,用于当所述第一检测模块检测到所述队列节点包含有消息时,将所述对列节点放入所述第二队列;以及第二放入模块,用于当所述第一检测模块检测到所述队列节点没有包含消息时,将所述对列节点放入所述第一队列。
7.如权利要求5所述的系统,其特征在于,所述第一队列处理模块具体包括第一队列节点取出模块,用于当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点;第二检测模块,用于检测取出的所述第一队列中的队列节点是否包含有消息; 第三放入模块,用于当所述第二检测模块检测所述队列节点包含有消息时,将所述队列节点放入所述第二队列;以及第四放入模块,用于当所述第二检测模块检测所述队列节点不包含消息时,继续将所述队列节点放入所述第一队列。
8.如权利要求5所述的系统,其特征在于,所述第二队列处理模块具体包括第二队列节点取出模块,用于当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点;第一监听操作模块,用于对每个队列节点执行监听操作,监听时间为第一时间; 第一消息接收模块,用于对所述第一监听操作模块监听操作后的队列节点进行消息的接收操作处理;第二监听操作模块,用于当所述第一消息接收模块从队列节点接收到消息时,继续对所述队列节点执行监听操作,所述监听时间为第二时间;第二消息接收模块,用于对所述第二监听操作模块监听操作后的队列节点继续进行消息的接收操作处理,直至消息接收完成;第五放入模块,用于当在第一时间内没有接收到消息,或在第二时间内没有接收到消息,则将所述队列节点放入第一队列;以及第六放入模块,用于当对所述队列节点的接收消息的次数超过预设阈值时,将所述队列节点放入第二队列。
全文摘要
本发明适用于数据处理技术领域,提供了一种从多队列节点获取消息的方法及系统,所述方法包括下述步骤创建两个同步队列,分别记为第一队列和第二队列,其中,所述第一队列用于存放没有消息存在的队列节点,所述第二队列用于存放有消息存在的队列节点;当所述第一队列中有队列节点元素时,循环取出所述第一队列中的队列节点,将包含有消息的队列节点放入所述第二队列,将没有包含消息的队列节点继续放入所述第一队列;当所述第二队列中有队列节点元素时,循环取出所述第二队列中的队列节点,对包含有消息的队列节点进行消息接收操作处理,减少对队列节点的消息处理时的等待时间,提高了传输效率。
文档编号G06F9/48GK102479106SQ20101055528
公开日2012年5月30日 申请日期2010年11月23日 优先权日2010年11月23日
发明者崔灿 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1