一种用于集群的消息队列接收方法及系统技术方案

技术编号:10579344 阅读:207 留言:0更新日期:2014-10-29 11:57
本发明专利技术公开了一种用于集群的消息队列接收方法,其包括:以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中;扫描分段消息表,根据分段消息中的消息Flag确定该分段消息是否为最后一段消息;根据已被确定为最后一段消息的分段消息的消息描述符计算该分段消息所属的完整消息的总长度;将分段消息表中的各分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,当计算的该长度等于计算的总长度时,将该组分段消息拼接为完整消息。本发明专利技术同时公开了一种用于集群的消息队列接收系统。本发明专利技术能够对分散在集群的各个不同队列中的分段消息进行拼接,确保了消息的完整性。

【技术实现步骤摘要】
一种用于集群的消息队列接收方法及系统
本专利技术涉及通信领域,更具体的,涉及一种用于集群的消息队列的接收方法。
技术介绍
计算机集群简称集群,是一种并行或分布式处理系统。集群就是通过一组松散集成的计算机相互连接,高度紧密地协作完成所需要的计算工作。其中,单个计算机通常被称为节点。在集群中节点进行并行处理、存储数据、进行协同工作,使得集群对外表现为一个整体。消息队列(MQ)是一种应用程序间进行进程通信的方法。应用程序通过写入和读取出入队列的针对应用程序的数据(消息)来通信,而无需专用连接。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过远程过程调用实现通信。队列的使用除去了接收和发送应用程序需要同时执行的要求,实现程序间解耦的目的。消息队列是一个典型的生产者、消费者模型,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ提供了消息分段的功能,如果消息对于应用程序来说过大,可以使用分段消息。消息可以由应用程序或队列管理器来分段,例如由应用程序在调用MQPUT放入消息时,使用MQ提供的分段参数设置,将一个消息分段为多个消息放入队列。如下是一个应用程序将消息分段发送的示例:对于应用程序分段的消息,在调用MQGET取出消息时,使用MQ提供的参数设置,可在分段消息全部到达时作为一个整体取出,如下是将分段消息作为整体取出的MQ参数设置示例:MQGMO.Options=MQGMO_SYNCPOINTMQGMO.Options|=MQGMO_LOGICAL_ORDER|MQGMO_ALL_MSGS_AVAILABLE|MQGMO_ALL_SEGMENTS_AVAILABLE;MQGMO.MatchOptions=MQMO_NONE;在非集群环境下,分段消息经过传输队列到达目标接收队列,可以通过设置相关参数,在到齐后再进行读取,即可从接收队列取出整个消息,多段消息可自动合并为一段作为整体被取出。但是在集群环境中,分段消息如果从集群外的队列管理器经过集群网关发送到集群内的各节点,则不能确保一组分段消息中的各段消息都到达同一队列管理器上的队列,这样分段消息被分发到了集群中不同的队列中,由于每个节点上消息不完整,无法通过设置相关参数,在一组分段消息的所有分段到齐后再进行读取。
技术实现思路
本专利技术的目的是提供一种能够用于集群环境的消息队列分段接收方法,并能够确保接收的消息完整。为此,本专利技术提供了一种用于集群的消息队列接收方法,其包括:S1、以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,所述多个分段消息来自多个不同的完整消息;S2、扫描所述分段消息表,根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;S3、根据已被确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度并进行记录;S4、将所述分段消息表中的各所述分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,如果计算的该长度等于步骤S3中计算的所述总长度,则将该组分段消息拼接为所述完整消息并存储到完整消息接收表中。本专利技术同时提供了一种用于集群的消息队列接收系统,其包括:读取单元,其配置为以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,所述多个分段消息来自多个不同的完整消息;扫描单元,其配置为扫描所述分段消息表,并根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;计算单元,其配置为根据由所述扫描单元确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度,以及对具有同一消息ID的一组分段消息进行长度求和;拼接单元,其配置为当所述计算单元计算的长度求和值等于其计算的所述总长度,则将该组分段消息拼接为所述完整消息并存储到完整消息接收表中;存储单元,其连接到所述读取单元、扫描单元、计算单元和拼接单元,用于存储所述分段消息表、所述完整消息接收表、所述长度求和值和所述总长度。通过本专利技术的用于集群的消息队列接收方法及系统,能够对分散在集群的各个不同队列中的分段消息进行拼接,确保了消息的完整性。附图说明图1是本专利技术的用于集群的消息队列接收方法的流程图;图2是根据本专利技术的集群中接收消息队列的整体架构示意图;图3是根据本专利技术的集群中接收消息队列的过程示意图;图4是根据本专利技术的用于集群的消息队列接收系统的流程图。具体实施方式下面参照附图对本专利技术的用于集群的消息队列接收方法和系统进行详细说明。图1是本专利技术的用于集群的消息队列接收方法的流程图;图2是根据本专利技术的集群中接收消息队列的整体架构示意图;图3是根据本专利技术的集群中接收消息队列的过程示意图。如图1-3所示,本专利技术的用于集群的消息队列接收方法包括步骤S1-S4:S1、以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,该多个分段消息来自多个不同的完整消息;由于当MQ分段消息从集群外队列管理器通过集群网关发送到集群内各队列管理器节点时,来自同一完整消息的一组分段消息中的各个分段消息被发送到了不同的队列上,因此本专利技术中在调用MQGET读取分段消息时,不设置MQ提供的取分段消息的参数,不再按已有的分段消息的读取方式,而是将每个分段消息作为独立的消息取出后,由应用程序(例如ORACLE)进行拼接。以一个被应用程序分为五段的消息为例,在集群中不同的队列按不分段的方式取出,每段消息的消息描述MD及消息内容如下:第1段消息:MsgId:X313030394343495330383032303030303030343500000000GroupId:X414D5120514D4331303039202020202008C70A4D2069D71FMsgSeqNumber:1Offset:0MsgFlag:MQMF_SEGMENT|^BMessageLen:139Message:H{1:4601CIS10099991000000111009CCIS08020000004520080615}第2段消息:MsgId:0X313030394343495330383032303030303030343500000000GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71FMsgSeqNumber:1Offset:139MsgFlag:MQMF_SEGMENT|^BMessageLen:1048576Message:B{3::B11:20070821:B10:999100000011:D1A:0:D1B:RMB0:D1C:25974:D1D:RMB425049930:D1E(省略)第3段消息:MsgId:0X313030394343495330383032303030303030343500000000GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71FMsgSeqNumber:1Offset:1048715MsgFlag:MQMF_SEGM本文档来自技高网
...
一种用于集群的消息队列接收方法及系统

【技术保护点】
一种用于集群的消息队列接收方法,其包括:S1、以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,所述多个分段消息来自多个不同的完整消息;S2、扫描所述分段消息表,根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;S3、根据已被确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度并进行记录;S4、将所述分段消息表中的各所述分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,当计算的该长度等于步骤S3中计算的所述总长度时,将该组分段消息拼接为所述完整消息并存储到完整消息接收表中。

【技术特征摘要】
1.一种用于集群的消息队列接收方法,其包括:S1、以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,所述多个分段消息来自多个不同的完整消息;S2、扫描所述分段消息表,根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;S3、根据已被确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度并进行记录;S4、将所述分段消息表中的各所述分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,当计算的该长度等于步骤S3中计算的所述总长度时,将该组分段消息拼接为所述完整消息并存储到完整消息接收表中。2.根据权利要求1所述的消息队列接收方法,其特征在于,在步骤S1中,以所述分段消息的消息ID、组ID和偏移量为主键,将读取到的所述分段消息存储到所述分段消息表中。3.根据权利要求2所述的消息队列接收方法,其特征在于,步骤S1还包括:记录各所述分段消息的消息描述符,并将所述分段消息正文写入所述分段消息表的lob字段。4.根据权利要求2所述的消息队列接收方法,其特征在于,步骤S4中的将所述分段消息表中的各所述分段消息按消息ID进行排序包括:扫描所述分段消息表,将具有相同的所述组ID的一组分段消息按消息ID进行排序。5.根据权利要求3所述的消息队列接收方法,其特征在于,步骤S4中的将该组分段消息拼接为所述完整消息包括:对于所述具有同一消息ID的一组分段消息,读取所述分段消息表的lob字段,按照偏移量进行排序,依次将所述lob字段中的内容拼接起来,组成所述完整消息。6.一种用于集群的消息队列接收系统,其包括:...

【专利技术属性】
技术研发人员:张径姝施政
申请(专利权)人:中国银行股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1