CN104125283B - 一种用于集群的消息队列接收方法及系统 - Google Patents
一种用于集群的消息队列接收方法及系统 Download PDFInfo
- Publication number
- CN104125283B CN104125283B CN201410370190.6A CN201410370190A CN104125283B CN 104125283 B CN104125283 B CN 104125283B CN 201410370190 A CN201410370190 A CN 201410370190A CN 104125283 B CN104125283 B CN 104125283B
- Authority
- CN
- China
- Prior art keywords
- message
- segmented messages
- messages
- segmented
- full
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种用于集群的消息队列接收方法,其包括:以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中;扫描分段消息表,根据分段消息中的消息Flag确定该分段消息是否为最后一段消息;根据已被确定为最后一段消息的分段消息的消息描述符计算该分段消息所属的完整消息的总长度;将分段消息表中的各分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,当计算的该长度等于计算的总长度时,将该组分段消息拼接为完整消息。本发明同时公开了一种用于集群的消息队列接收系统。本发明能够对分散在集群的各个不同队列中的分段消息进行拼接,确保了消息的完整性。
Description
技术领域
本发明涉及通信领域,更具体的,涉及一种用于集群的消息队列的接收方法。
背景技术
计算机集群简称集群,是一种并行或分布式处理系统。集群就是通过一组松散集成的计算机相互连接,高度紧密地协作完成所需要的计算工作。其中,单个计算机通常被称为节点。在集群中节点进行并行处理、存储数据、进行协同工作,使得集群对外表现为一个整体。
消息队列(MQ)是一种应用程序间进行进程通信的方法。应用程序通过写入和读取出入队列的针对应用程序的数据(消息)来通信,而无需专用连接。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过远程过程调用实现通信。队列的使用除去了接收和发送应用程序需要同时执行的要求,实现程序间解耦的目的。消息队列是一个典型的生产者、消费者模型,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。
MQ提供了消息分段的功能,如果消息对于应用程序来说过大,可以使用分段消息。消息可以由应用程序或队列管理器来分段,例如由应用程序在调用MQPUT放入消息时,使用MQ提供的分段参数设置,将一个消息分段为多个消息放入队列。如下是一个应用程序将消息分段发送的示例:
对于应用程序分段的消息,在调用MQGET取出消息时,使用MQ提供的参数设置,可在分段消息全部到达时作为一个整体取出,如下是将分段消息作为整体取出的MQ参数设置示例:
MQGMO.Options=MQGMO_SYNCPOINT
MQGMO.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:X313030394343495330383032303030303030343500000000
GroupId:X414D5120514D4331303039202020202008C70A4D2069D71F
MsgSeqNumber:1
Offset:0
MsgFlag:MQMF_SEGMENT|^B
Message Len:139
Message:
H{1:4601CIS1009999100000011 1009CCIS080200000045 20080615}
第2段消息:
MsgId:0X313030394343495330383032303030303030343500000000
GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71F
MsgSeqNumber:1
Offset:139
MsgFlag:MQMF_SEGMENT|^B
Message Len:1048576
Message:
B{3::B11:20070821:B10:999100000011:D1A:0:D1B:RMB0:D1C:25974:D1D:RMB425049930:D1E(省略)
第3段消息:
MsgId:0X313030394343495330383032303030303030343500000000
GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71F
MsgSeqNumber:1
Offset:1048715
MsgFlag:MQMF_SEGMENT|^B
Message Len:1048576
Message:
B0271500331141000000000023178051002200708210011100027150033114200000000001787805(省略)
第4段消息:
MsgId:0X313030394343495330383032303030303030343500000000
GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71F
MsgSeqNumber:1
Offset:2097291
MsgFlag:MQMF_SEGMENT|^B
Message Len:154750
Message:
B6906051012200708210011100027150035256200000000001223405101220070821001110002715(省略)
第5段消息:
MsgId:0X313030394343495330383032303030303030343500000000
GroupId:0X414D5120514D4331303039202020202008C70A4D2069D71F
MsgSeqNumber:1
Offset:2252041
MsgFlag:MQMF_SEGMENT|MQMF_LAST_SEGMENT|^F
Message Len:37
Message:
T{C:}
在本发明一个实施例中,可在步骤S1中以所述分段消息的消息ID、组ID和偏移量为主键,来将读取到的所述分段消息存储到所述分段消息表中。步骤S1还可以包括:记录各分段消息的消息描述符,并将分段消息正文写入所述分段消息表的lob字段,以备后续拼接之用。
本发明中的分段消息表的示例性结构如下表1所示:
表1
表1中的最右一列对各字段名的内容进行了说明,其中,MsgId为消息ID,即消息标识信息;GroupId为组ID,即组标识信息;MsgFlag为消息Flag,即消息标志位;MsgSeqNumber为消息序列号。在“类型”一列中,Char为字符类型,Number为数字类型,blob为Oracle的二进制数据;在“可否为空”一列中,NOT NULL为非空,Default为默认值。
S2、扫描所述分段消息表,根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;
在该步骤中,扫描整个分段消息表,根据消息Flag来确认那些从完整消息中分段出的最后一个分段消息,作为消息拼接的入手点。
S3、根据已被确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度并进行记录;
在该步骤中,可根据作为该最后一段消息的分段消息的消息描述MD(描述符)中的Offset(偏移量)和Msglen(消息长度)计算出该完整消息的总长度,将该总长度对应于该最后一段消息记录在分段消息表中。
S4、将所述分段消息表中的各所述分段消息按消息ID进行排序,对具有同一消息ID的一组分段消息进行长度求和,当计算的该长度等于步骤S3中计算的所述总长度时,将该组分段消息拼接为所述完整消息并存储到完整消息接收表中。
在该步骤中,分段消息记录到分短消息辅表后,由后台常驻进程扫描分段消息表,对长度符合条件的同一组分段进行拼接处理,组成完整消息。
本发明中的完整消息接收表的示例性结构如下表2所示:
表2
表2中的最右一列对各字段名的内容进行了说明,其中,MsgId为消息ID,即消息标识信息;GroupId为组ID,即组标识信息。在“类型”一列中,Char为字符类型,;在“可否为空”一列中,NOT NULL为非空,Default为默认值。
在步骤S3-S4中,还可以定义游标,并对分段消息定义拼接标识。取出分段消息表中拼接标志为未拼接的消息,按mesgid排序,打开游标,循环取游标,对同一个mesgid的一组记录的消息长度求和,若消息总长度等于接收最后一条分段消息时计算的消息总长度,则将该组分段消息的拼接标志置为“已拼接”,记录下此mesgid,跳出取游标循环,关闭游标。之后,取出上一步已经取出的消息已到齐的mesgid对应的一组分段消息记录,按偏移量排序,打开游标,循环取出此mesgid对应的一组分段消息记录的lob字段,依次将lob字段中的内容拼接起来,组成完整消息,记入完整消息接收表。然后继续下一次循环查找是否有已经到齐的同一组分段消息。
经过以上步骤S1-S4,分散在集群中的分段消息被拼接成了完整的消息。
图4是根据本发明的用于集群的消息队列接收系统的流程图。如图4所示,本发明的用于集群的消息队列接收系统包括读取单元、扫描单元、计算单元、拼接单元和存储单元。
其中,读取单元用于以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,该多个分段消息来自多个不同的完整消息。这里读取单元在读取分段消息时,可采用以分段消息的消息ID、组ID和偏移量为主键的方式将读取到的分段消息存储到分段消息表中,并且记录各分段消息的消息描述符,将分段消息正文写入分段消息表的lob字段。
扫描单元用于扫描所述分段消息表,并根据分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;
计算单元用于根据由扫描单元确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度,以及用于对具有同一消息ID的一组分段消息进行长度求和;
拼接单元用于当计算单元计算的长度求和值等于其计算的所述总长度,则将该组分段消息拼接为完整消息并存储到完整消息接收表中。具体拼接过程为,对于具有同一消息ID的一组分段消息,拼接单元读取分段消息表的lob字段,按照偏移量排序,依次将所述lob字段中的内容拼接起来,组成完整消息;
存储单元连接到所述读取单元、扫描单元、计算单元和拼接单元,并用于存储分段消息表、完整消息接收表、长度求和值和总长度。
本发明的消息队列接收系统还可以包括排序单元,其用于将分段消息表中的具有相同的组ID的一组分段消息按消息ID进行排序。
通过本发明的用于集群的消息队列接收系统,能够对分散在集群的各个不同队列中的分段消息进行拼接,确保了消息的完整性。
以上对本发明的各实施例进行了说明,但本发明不局限于上述特定实施例子,在不背离本发明精神及其实质情况下,熟悉本领域技术人员可根据本发明作出各种相应改变和变形,但这些相应改变和变形都应属于本发明所附权利要求保护范围之内。
Claims (10)
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.一种用于集群的消息队列接收系统,其包括:
读取单元,其配置为以读取独立消息的方式从集群中的各个消息队列读取多个分段消息并存储到分段消息表中,所述多个分段消息来自多个不同的完整消息;
扫描单元,其配置为扫描所述分段消息表,并根据所述分段消息中的消息Flag确定该分段消息是否为来自同一个完整消息的多个分段消息中的最后一段消息;
计算单元,其配置为根据由所述扫描单元确定为最后一段消息的所述分段消息的消息描述符计算该分段消息所属的完整消息的总长度,以及对具有同一消息ID的一组分段消息进行长度求和;
拼接单元,其配置为当所述计算单元计算的长度求和值等于其计算的所述总长度,则将该组分段消息拼接为所述完整消息并存储到完整消息接收表中;
存储单元,其连接到所述读取单元、扫描单元、计算单元和拼接单元,用于存储所述分段消息表、所述完整消息接收表、所述长度求和值和所述总长度。
7.根据权利要求6所述的消息队列接收系统,其特征在于,所述读取单元具体配置为以所述分段消息的消息ID、组ID和偏移量为主键而将读取到的所述分段消息存储到所述分段消息表中。
8.根据权利要求7所述的消息队列接收系统,其特征在于,所述读取单元具体配置为记录各所述分段消息的消息描述符,并将所述分段消息正文写入所述分段消息表的lob字段。
9.根据权利要求7所述的消息队列接收系统,其特征在于,还包括排序单元,其配置为将所述分段消息表中的具有相同的所述组ID的一组分段消息按消息ID进行排序。
10.根据权利要求8所述的消息队列接收系统,其特征在于,所述拼接单元具体配置为:对于所述具有同一消息ID的一组分段消息,读取所述分段消息表的lob字段,按照偏移量从小到大的顺序,依次将所述lob字段中的内容拼接起来,组成所述完整消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410370190.6A CN104125283B (zh) | 2014-07-30 | 2014-07-30 | 一种用于集群的消息队列接收方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410370190.6A CN104125283B (zh) | 2014-07-30 | 2014-07-30 | 一种用于集群的消息队列接收方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104125283A CN104125283A (zh) | 2014-10-29 |
CN104125283B true CN104125283B (zh) | 2017-10-03 |
Family
ID=51770547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410370190.6A Active CN104125283B (zh) | 2014-07-30 | 2014-07-30 | 一种用于集群的消息队列接收方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104125283B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107562765A (zh) * | 2016-07-01 | 2018-01-09 | 中兴通讯股份有限公司 | 一种信息处理方法及装置 |
CN113765926B (zh) * | 2021-09-08 | 2023-06-13 | 百果园技术(新加坡)有限公司 | 一种消息重建方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101106550A (zh) * | 2007-08-31 | 2008-01-16 | 金蝶软件(中国)有限公司 | 大尺寸消息的发送方法、接收方法及传输系统 |
CN101795266A (zh) * | 2009-12-31 | 2010-08-04 | 中国航空工业集团公司第六三一研究所 | 航电asm协议控制器 |
CN103221934A (zh) * | 2010-11-18 | 2013-07-24 | 德克萨斯仪器股份有限公司 | 用于处理集群的控制节点 |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2381189A1 (en) * | 2000-06-02 | 2001-12-13 | Inrange Technologies Corporation | Message queue server system |
US7406511B2 (en) * | 2002-08-26 | 2008-07-29 | International Business Machines Corporation | System and method for processing transactions in a multisystem database environment |
-
2014
- 2014-07-30 CN CN201410370190.6A patent/CN104125283B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101106550A (zh) * | 2007-08-31 | 2008-01-16 | 金蝶软件(中国)有限公司 | 大尺寸消息的发送方法、接收方法及传输系统 |
CN101795266A (zh) * | 2009-12-31 | 2010-08-04 | 中国航空工业集团公司第六三一研究所 | 航电asm协议控制器 |
CN103221934A (zh) * | 2010-11-18 | 2013-07-24 | 德克萨斯仪器股份有限公司 | 用于处理集群的控制节点 |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
Non-Patent Citations (2)
Title |
---|
基于消息传递的MCC集群实现;罗四维,韩德海;《北方交通大学学报》;20020430;第26卷(第2期);全文 * |
私有云环境下通信平台设计与实现;杨志豪;《中国优秀硕士学位论文全文数据库(电子期刊)·信息科技辑》;20110411;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104125283A (zh) | 2014-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108170792B (zh) | 基于人工智能的问答引导方法、装置和计算机设备 | |
CN108509569A (zh) | 企业画像的生成方法、装置、电子设备以及存储介质 | |
CN104104778A (zh) | 一种移动终端的短消息处理方法和装置 | |
CN104301207B (zh) | 网络信息处理方法及装置 | |
CN105260487A (zh) | 图片的管理方法及图片的管理装置 | |
US8407221B2 (en) | Generalized notion of similarities between uncertain time series | |
CN105100165A (zh) | 网络服务推荐方法和装置 | |
CN108171189A (zh) | 一种视频编码方法、视频编码装置及电子设备 | |
CN107465687A (zh) | 一种权限配置的实现方法、装置及终端 | |
CN104125283B (zh) | 一种用于集群的消息队列接收方法及系统 | |
US20230298314A1 (en) | Image clustering method and apparatus, computer device, and storage medium | |
CN104765596A (zh) | 请求处理方法和装置 | |
CN111090729B (zh) | 欺诈团伙的识别方法、装置、服务器和存储介质 | |
US11216500B1 (en) | Provisioning mailbox views | |
CN104573132B (zh) | 歌曲查找方法及装置 | |
CN104102411B (zh) | 一种文本编辑方法和文本编辑装置 | |
CN109558381A (zh) | 一种数据处理方法及装置 | |
CN103220555B (zh) | 一种数字电视用户的分类方法、装置及系统 | |
US11422998B2 (en) | Data management system, data management device, data management method, and storage medium | |
CN103049808A (zh) | 信息处理设备和信息处理方法 | |
CN103957012A (zh) | 一种dfa矩阵的压缩方法及装置 | |
US10135926B2 (en) | Shuffle embedded distributed storage system supporting virtual merge and method thereof | |
CN104867103A (zh) | 照片显示处理方法和装置 | |
CN115328892B (zh) | 一种业务表单数据结构处理方法、系统、电子设备及介质 | |
JP6135964B2 (ja) | 情報提供方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |