CN118093522A - 基于数据持久化的消息数据处理方法、装置及设备 - Google Patents
基于数据持久化的消息数据处理方法、装置及设备 Download PDFInfo
- Publication number
- CN118093522A CN118093522A CN202410479666.3A CN202410479666A CN118093522A CN 118093522 A CN118093522 A CN 118093522A CN 202410479666 A CN202410479666 A CN 202410479666A CN 118093522 A CN118093522 A CN 118093522A
- Authority
- CN
- China
- Prior art keywords
- message
- index file
- current
- target
- target index
- 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.)
- Pending
Links
- 230000002688 persistence Effects 0.000 title claims abstract description 45
- 238000003672 processing method Methods 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 55
- 238000012545 processing Methods 0.000 claims abstract description 46
- 238000005192 partition Methods 0.000 claims abstract description 25
- 230000000903 blocking effect Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 14
- 208000019116 sleep disease Diseases 0.000 claims description 3
- 230000036578 sleeping time Effects 0.000 claims description 2
- 238000012423 maintenance Methods 0.000 abstract description 6
- 230000002085 persistent effect Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 230000004622 sleep time Effects 0.000 description 6
- 238000001914 filtration Methods 0.000 description 4
- 239000012634 fragment Substances 0.000 description 4
- 239000013589 supplement Substances 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了基于数据持久化的消息数据处理方法、装置及设备,方法包括:获取与消息写入指令相对应的待处理消息;基于第一预设数据处理策略获取与待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,获取当前可写入消息记录文件以写入待处理消息的相应数据,并更新当前可写入消息记录文件;基于第二预设数据处理策略获取与待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,获取当前可写入索引文件以写入待处理消息的相应数据,并更新当前可写入索引文件。本发明实施例能对交易系统产生的业务数据结合消息记录文件和索引文件持久化写入,无需引入消息中间件,降低运维成本,还能对存储的消息进行便捷推送操作。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及基于数据持久化的消息数据处理方法、装置及设备。
背景技术
交易系统在处理交易业务过程中会产生大量业务数据,需要在保证高性能、高可靠的前提下把这些业务数据推送至周边系统完成业务的闭环。在上述过程中,如果使用传统的消息中间件来完成这项任务,不仅会给交易系统带来额外的运维成本,而且无法满足交易系统中的一些定制化需求,例如消息按需过滤,消息回溯等。
发明内容
本发明实施例提供了基于数据持久化的消息数据处理方法、装置及设备,旨在解决现有技术中交易系统使用消息中间件将业务数据推送至周边系统,不仅交易系统带来额外的运维成本,而且无法满足在交易系统中进行消息按需过滤及消息回溯等数据操作的问题。
第一方面,本发明实施例提供了一种基于数据持久化的消息数据处理方法,其包括:
响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息;
基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件;
基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
第二方面,本发明实施例还提供了一种基于数据持久化的消息数据处理装置,其包括:
待处理消息接收单元,用于响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息;
第一持久化写入单元,用于基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件;
第二持久化写入单元,用于基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
本发明实施例提供了基于数据持久化的消息数据处理方法、装置及设备,方法包括:响应于消息写入指令,则获取与消息写入指令相对应的待处理消息;基于第一预设数据处理策略至少获取与待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至当前可写入消息记录文件,以更新当前可写入消息记录文件;基于第二预设数据处理策略至少获取与待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至当前可写入索引文件,以更新当前可写入索引文件。本发明实施例能对交易系统产生的业务数据结合消息记录文件和索引文件持久化写入,无需引入消息中间件,降低了运维成本,还能对存储的消息进行便捷的推送操作。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于数据持久化的消息数据处理方法的应用场景示意图;
图2为本发明实施例提供的基于数据持久化的消息数据处理方法的流程示意图;
图3A为本发明实施例提供的基于数据持久化的消息数据处理方法中消息记录文件的数据结构示意图;
图3B为本发明实施例提供的基于数据持久化的消息数据处理方法中索引文件的数据结构示意图;
图3C为本发明实施例提供的基于数据持久化的消息数据处理方法中消息存储示例的示意图;
图4为本发明实施例提供的基于数据持久化的消息数据处理方法的第二子流程示意图;
图5为本发明实施例提供的基于数据持久化的消息数据处理装置的示意性框图;
图6为本发明实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和 “包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/ 或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请同时参阅图1和图2,图1为本发明实施例基于数据持久化的消息数据处理方法的场景示意图,图2是本发明实施例提供的基于数据持久化的消息数据处理方法的流程示意图。该方法应用于服务器10,服务器10可与其他业务系统20通讯。如图2所示,该方法包括以下步骤S110-S130。
S110、响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息。
在本实施例中,是以服务器为执行主体描述技术方案。且本申请所涉及的服务器具体是交易系统如证券交易系统的服务器。当服务器中可以设置消息仓库,且在消息仓库中又具体包括消息记录文件仓库和索引文件仓库。当有消息从其他业务系统传输至服务器且需写入服务器时,也即服务器检测到其他业务系统发送的消息写入指令时,则先是获取到与所述消息写入指令相对应的待处理消息,并将该待处理消息作为持久化写入的对象。之后再具体对其进行信息获取等处理后进行具体的持久化写入处理。
S120、基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件。
在本实施例中,当获取了原始的待处理消息后,基于第一预设数据处理策略可以对其进行解析,以获取到与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,然后还需要在消息记录文件仓库中获取当前可写入消息记录文件。
其中,消息记录文件仓库中存储了多个消息记录文件(可用msgrecord表示),每一消息记录文件的数据结构如图3A所示,即一个消息记录文件中可存储多个消息(如图3A所示的数据结构中的msg1~msgN,N为正整数),每一个消息对应的条目至少包括消息类型(即图3A中msgType,其大小为4byte)、分区号(即图3A中partition,其大小为4byte)、消息大小(即图3A中msgSize,其大小为4byte)、消息校验码(即图3A中crcCode,其大小为4byte)、消息体(即图3A中msg,其大小为nbyte,也即不限定具体字节数),文件尾部存储最新的消息序列号(即图3A中sequence,其大小为8byte)。更具体的,可将每一个消息记录文件的大小设置为1GB(即1073741824byte);每一个消息记录文件的文件命名规则为在消息记录文件的起始偏移量左侧补若干个0以组成20位的文件名称,例如00000000000000000000代表了第一个消息记录文件且起始偏移量为0,其文件大小为1G=1073741824;当第一个消息记录文件写满消息之后,第二个消息记录文件为00000000001073741824且起始偏移量为1073741824。而且,每一消息记录文件中存放的是原始的消息,不会对消息进行解码,且不会区分消息类型(即同一个消息记录文件中可以存储不同消息类型的消息)。每一消息记录文件在服务器中最佳是选用一块连续的虚拟内存空间(如为1GB大小),以最大发挥数据顺序写的特性。
具体的,若在服务器中设置了针对不同的业务系统对应不同的消息记录文件时,还可以基于第一预设数据处理策略获取与所述消息写入指令对应的目标业务系统,并获取与所述目标业务系统对应的且当前为可写入状态的当前可写入消息记录文件。之后将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件。
S130、基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
在本实施例中,在服务器中除了基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体并将其写入当前可写入消息记录文件。还需要基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,然后还需要在索引文件仓库中获取当前可写入索引文件。
其中,索引文件仓库中存储了多个索引文件(可用index表示),每一个索引文件的数据结构如图3B所示,即一个索引文件中可以存储多个索引(如图3B所示的数据结构中的index1~indexN,N为正整数),每一个索引对应的条目至少包括消息物理偏移量(即图3B中的physicOffset,其大小为8byte)、消息数据大小(即图3B中的msgSize,其大小为4byte)和消息接收时间(即图3B中的timestamp,其大小为8byte),即每一个索引对应的条目大小为20 byte。例如在一个索引文件中设置了多多存储30万个索引的条目,则其大小约为5.72M。更具体的,每一个索引文件的文件命名规则为在索引文件的起始偏移量左侧补若干个0以组成20位的文件名称,例如00000000000000000000代表了第一个索引文件且起始偏移量为0,其文件大小为6000000byte(约为5.72M);当第一个索引文件写满了,第二个索引文件为0000000000000006000000且起始偏移量为6000000。通过索引文件中的每一个条目,可以检索出在相应消息记录文件中的目标消息。
当在服务器中获取到了待处理消息对应的息物理偏移量、消息数据大小和消息接收时间,以及在索引文件仓库中确定了当前可写入索引文件后,再将待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件,从而完成了对待处理消息在服务器中的持续化写入和存储。
在步骤S110-S130中是以一条待处理消息的写入及持久化存储过程为例描述了技术方案,若有多条待处理消息的写入,均是参照上述一条待处理消息的写入过程。完成了多个消息的存储后,得到的消息存储示例如图3C所示。
因直接在服务器中对海量待处理消息进行了如上处理后以持久化存储,故之后其他业务系统可请求获取服务器中已存储的消息,从而完成针对消息的订阅,消息过滤查询、消息断点续传、按时间消息回溯等操作。而且,还实现了对消息的分片存储,以便于后续的分片推送。
在一实施例中,如图4所示,在步骤S130之后还包括:
S141、若检测到消息读取指令,则创建与所述消息读取指令对应的当前消费队列;
S142、获取与所述消息读取指令对应的消息订阅信息和与所述消息订阅信息对应的目标索引文件;
S143、获取当前索引文件读指针;其中,所述当前索引文件读指针的初始值为0;
S144、判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针;
S145、若确定所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,则获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据;
S146、基于所述当前目标索引数据在对应的当前目标消息记录文件中获取当前目标消息;
S147、将所述当前目标消息发送至所述当前消费队列,以由所述当前消费队列将所述当前目标消息推送至所述消息订阅信息对应的业务系统;
S148、将当前索引文件读指针加一以更新所述当前索引文件读指针,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,当在服务器中完成了对大量消息的持久化存储后,此时这些消息则可用于被其他业务系统进行数据消费,也即由服务器将其他业务系统请求的数据推送至其他业务系统。当服务器检测到其他业务系统发送的消息读取指令,首先是创建与所述消息读取指令对应的当前消费队列。之后,还要基于消息读取指令获取到消息订阅信息和与所述消息订阅信息对应的目标索引文件,其中消息订阅信息中至少包括了消息订阅对象(也即可获知是哪一业务系统需要从服务器中获取消息),基于消息订阅信息的消息订阅对象还可以进一步确定目标索引文件。例如,该目标索引文件为索引文件仓库中已存储的多个索引文件中的其中一个索引文件,这一目标索引文件也是针对消息订阅对象的若干个索引文件中的其中一个。
在确定了目标索引文件后,还能得到与目标索引文件对应的若干个目标消息记录文件。此时先获取一个初始值为0的当前索引文件读指针,还能同时获取到所述目标索引文件的目标索引文件写指针;之后判断所述当前索引文件读指针是否小于或等于所述目标索引文件写指针;若确定所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,则表示此时能获取到所述当前索引文件读指针所指向的索引条目也即当前目标索引数据,并基于所述当前目标索引数据在对应的当前目标消息记录文件(当前目标消息记录文件是由目标索引文件所确定)中获取当前目标消息;然后将所述当前目标消息发送至所述当前消费队列,以由所述当前消费队列将所述当前目标消息推送至所述消息订阅信息对应的业务系统。
上述过程是描述了基于当前索引文件读指针对应在当前目标消息记录文件中获取一条当前目标消息并发送至业务系统的过程。之后,可以将当前索引文件读指针加一以更新所述当前索引文件读指针,并返回执行步骤S144。这一循环读取的过程是在所述当前索引文件读指针首次大于所述目标索引文件的目标索引文件写指针时停止,通过上述过程可以将基于目标索引文件所能对应获取到的全部消息都完成读取并由当前消费队列推送至与所述消息订阅信息对应的业务系统。
在一实施例中,在步骤S144之后还包括:
若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则确定所述当前索引文件读指针与所述目标索引文件的最大容量值的大小关系;
若确定所述当前索引文件读指针不等于所述目标索引文件的最大容量值,则获取当前循环次数;其中,所述当前循环次数的初始值为0;
判断所述当前循环次数是否小于预设最大循环次数;
若确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数,并在睡眠预设睡眠时长后返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则表示基于目标索引文件所能对应获取到的全部消息都完成读取,此时需要进一步判断是否是因为所述当前索引文件读指针已经指向了所述目标索引文件的最大容量值。
若确定所述当前索引文件读指针不等于所述目标索引文件的最大容量值(更具体是所述当前索引文件读指针小于所述目标索引文件的最大容量值),则表示所述目标索引文件还能继续写入索引条目,而每一新写入的索引条目又能对应新存储至服务器中的消息。在此时可以先获取一个初始值为0的当前循环次数,然后判断所述当前循环次数是否小于预设最大循环次数。在确定了所述当前循环次数小于所述预设最大循环次数,则表示服务器可以先睡眠预设睡眠时长,且将所述当前循环次数加一以更新所述当前循环次数,之后返回执行步骤S144。通过加入上述循环睡眠等待的机制,可以等待目标索引文件写入新的索引条目后,再去基于当前索引文件读指针去目标索引文件中去读取索引条目,并从相应的消息记录文件中获取消息并发送至对应的业务系统。
当然,在若确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数并睡眠预设睡眠时长之后,且在返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤之前,还需执行以下步骤:
若检测到所述目标索引文件存在更新,则对应更新所述目标索引文件写指针。
即在确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数并睡眠预设睡眠时长之后,一旦检测到目标索引文件存在更新且目标索引文件写指针发生了改变(一般是增大),则此时再返回执行步骤S144则可以再基于当前索引文件读指针从目标索引文件中去读取索引条目并获取相应的消息以推送至业务系统。
在一实施例中,在所述若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则确定所述当前索引文件读指针与所述目标索引文件的最大容量值的大小关系的步骤之后,所述方法还包括:
若确定所述当前索引文件读指针等于所述目标索引文件的最大容量值,则获取与所述消息订阅信息对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤。
在本实施例中,若确定所述当前索引文件读指针等于所述目标索引文件的最大容量值,则表示所述当前索引文件读指针已经指向了目标索引文件中的最后一条索引条目且不能再从目标索引文件中读取下一个索引条目,此时可以获取与所述消息订阅信息对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤。
也即,与消息订阅信息中消息订阅对象当前对应的目标索引文件的所有索引条目被读取完毕后,再去获取消息订阅对象对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤,此时仍需要将当前索引文件读指针初始设置为0后继续执行后续步骤。可见,通过上述方式,能对同一消息订阅对象的多个索引文件都进行读取以获取相应消息以推送至业务系统。
在一实施例中,在所述判断所述当前循环次数是否小于预设最大循环次数的步骤之后,所述方法还包括:
若确定所述当前循环次数大于或等于所述预设最大循环次数,则对所述当前索引文件读指针对应增加读锁,以由所述读锁禁止基于所述当前索引文件读指针从所述目标索引文件中获取索引数据;
获取第一当前索引文件写指针并更新作为所述目标索引文件写指针;
若确定所述当前索引文件读指针小于所述目标索引文件写指针,则释放所述读锁,并返回执行所述获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据的步骤。
在本实施例中,若确定所述当前循环次数大于或等于所述预设最大循环次数,则表示服务器在读取目标索引文件的过程中已经睡眠过预设最大循环次数,且在这一过程中目标索引文件一直无新的索引条目写入而导致不能获取到消息推送至业务系统。为了有效节约服务器的系统资源,可对所述当前索引文件读指针对应增加读锁,以由所述读锁禁止基于所述当前索引文件读指针从所述目标索引文件中获取索引数据。
之后,若一旦目标索引文件中有新的索引条目写入,则会导致目标索引文件写指针发生改变(一般是增大),此时获取当前最新的第一当前索引文件写指针并更新作为所述目标索引文件写指针。之后,再释放所述读锁,并返回执行步骤S145。
在一实施例中,在所述获取当前索引文件写指针并更新作为所述目标索引文件写指针的步骤之后还包括:
若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,则增加阻塞线程。
在本实施例中,若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,也即表示所述当前索引文件读指针在目标索引文件中对应的指向位置中没有存储新的索引条目,此时可以增加一个阻塞线程,通过阻塞线程使得基于当前索引文件读指针不再能从目标索引文件中读取到索引条目。可见,基于阻塞线程可以避免当前索引文件读指针的读取请求对服务器继续占用系统资源所导致的系统拥塞。
在一实施例中,在所述若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,则增加阻塞线程的步骤之后,还包括:
若检测到所述目标索引文件写指针的增大更新,则获取第二当前索引文件写指针并更新作为所述目标索引文件写指针,则解除所述阻塞线程,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,上述过程中设置的阻塞线程会一直存在,直至目标索引文件中有新的索引条目写入(本质上是目标索引文件对应的当前目标消息记录文件有新的消息写入)才能唤醒该阻塞线程。此时在检测到所述目标索引文件写指针的增大更新,则获取第二当前索引文件写指针并更新作为所述目标索引文件写指针,因一定会至少有一次能判断出所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,故此时再次返回执行步骤S144。
可见,实施该方法的实施例能对交易系统产生的业务数据结合消息记录文件和索引文件持久化写入,无需引入消息中间件,降低了运维成本,还能对存储的消息进行便捷的推送操作。
图5是本发明实施例提供的一种基于数据持久化的消息数据处理装置的示意性框图。如图5所示,对应于以上基于数据持久化的消息数据处理方法,本发明还提供一种基于数据持久化的消息数据处理装置100。该基于数据持久化的消息数据处理装置包括:待处理消息接收单元110、第一持久化写入单元120及第二持久化写入单元130。
待处理消息接收单元110,用于响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息。
在本实施例中,是以服务器为执行主体描述技术方案。且本申请所涉及的服务器具体是交易系统如证券交易系统的服务器。当服务器中可以设置消息仓库,且在消息仓库中又具体包括消息记录文件仓库和索引文件仓库。当有消息从其他业务系统传输至服务器且需写入服务器时,也即服务器检测到其他业务系统发送的消息写入指令时,则先是获取到与所述消息写入指令相对应的待处理消息,并将该待处理消息作为持久化写入的对象。之后再具体对其进行信息获取等处理后进行具体的持久化写入处理。
第一持久化写入单元120,用于基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件。
在本实施例中,当获取了原始的待处理消息后,基于第一预设数据处理策略可以对其进行解析,以获取到与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,然后还需要在消息记录文件仓库中获取当前可写入消息记录文件。
其中,消息记录文件仓库中存储了多个消息记录文件(可用msgrecord表示),每一消息记录文件的数据结构如图3A所示,即一个消息记录文件中可存储多个消息(如图3A所示的数据结构中的msg1~msgN,N为正整数),每一个消息对应的条目至少包括消息类型(即图3A中msgType,其大小为4byte)、分区号(即图3A中partition,其大小为4byte)、消息大小(即图3A中msgSize,其大小为4byte)、消息校验码(即图3A中crcCode,其大小为4byte)、消息体(即图3A中msg,其大小为nbyte,也即不限定具体字节数),文件尾部存储最新的消息序列号(即图3A中sequence,其大小为8byte)。更具体的,可将每一个消息记录文件的大小设置为1GB(即1073741824byte);每一个消息记录文件的文件命名规则为在消息记录文件的起始偏移量左侧补若干个0以组成20位的文件名称,例如00000000000000000000代表了第一个消息记录文件且起始偏移量为0,其文件大小为1G=1073741824;当第一个消息记录文件写满消息之后,第二个消息记录文件为00000000001073741824且起始偏移量为1073741824。而且,每一消息记录文件中存放的是原始的消息,不会对消息进行解码,且不会区分消息类型(即同一个消息记录文件中可以存储不同消息类型的消息)。每一消息记录文件在服务器中最佳是选用一块连续的虚拟内存空间(如为1GB大小),以最大发挥数据顺序写的特性。
具体的,若在服务器中设置了针对不同的业务系统对应不同的消息记录文件时,还可以基于第一预设数据处理策略获取与所述消息写入指令对应的目标业务系统,并获取与所述目标业务系统对应的且当前为可写入状态的当前可写入消息记录文件。之后将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件。
第二持久化写入单元130,用于基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
在本实施例中,在服务器中除了基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体并将其写入当前可写入消息记录文件。还需要基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,然后还需要在索引文件仓库中获取当前可写入索引文件。
其中,索引文件仓库中存储了多个索引文件(可用index表示),每一个索引文件的数据结构如图3B所示,即一个索引文件中可以存储多个索引(如图3B所示的数据结构中的index1~indexN,N为正整数),每一个索引对应的条目至少包括消息物理偏移量(即图3B中的physicOffset,其大小为8byte)、消息数据大小(即图3B中的msgSize,其大小为4byte)和消息接收时间(即图3B中的timestamp,其大小为8byte),即每一个索引对应的条目大小为20 byte。例如在一个索引文件中设置了多多存储30万个索引的条目,则其大小约为5.72M。更具体的,每一个索引文件的文件命名规则为在索引文件的起始偏移量左侧补若干个0以组成20位的文件名称,例如00000000000000000000代表了第一个索引文件且起始偏移量为0,其文件大小为6000000byte(约为5.72M);当第一个索引文件写满了,第二个索引文件为0000000000000006000000且起始偏移量为6000000。通过索引文件中的每一个条目,可以检索出在相应消息记录文件中的目标消息。
当在服务器中获取到了待处理消息对应的息物理偏移量、消息数据大小和消息接收时间,以及在索引文件仓库中确定了当前可写入索引文件后,再将待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件,从而完成了对待处理消息在服务器中的持续化写入和存储。
在待处理消息接收单元110、第一持久化写入单元120及第二持久化写入单元130中是以一条待处理消息的写入及持久化存储过程为例描述了技术方案,若有多条待处理消息的写入,均是参照上述一条待处理消息的写入过程。完成了多个消息的存储后,得到的消息存储示例如图3C所示。
因直接在服务器中对海量待处理消息进行了如上处理后以持久化存储,故之后其他业务系统可请求获取服务器中已存储的消息,从而完成针对消息的订阅,消息过滤查询、消息断点续传、按时间消息回溯等操作。而且,还实现了对消息的分片存储,以便于后续的分片推送。
在一实施例中,基于数据持久化的消息数据处理装置100还包括:
第一执行单元,用于若检测到消息读取指令,则创建与所述消息读取指令对应的当前消费队列;
第二执行单元,用于获取与所述消息读取指令对应的消息订阅信息和与所述消息订阅信息对应的目标索引文件;
第三执行单元,用于获取当前索引文件读指针;其中,所述当前索引文件读指针的初始值为0;
第四执行单元,用于判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针;
第五执行单元,用于若确定所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,则获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据;
第六执行单元,用于基于所述当前目标索引数据在对应的当前目标消息记录文件中获取当前目标消息;
第七执行单元,用于将所述当前目标消息发送至所述当前消费队列,以由所述当前消费队列将所述当前目标消息推送至所述消息订阅信息对应的业务系统;
第八执行单元,用于将当前索引文件读指针加一以更新所述当前索引文件读指针,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,当在服务器中完成了对大量消息的持久化存储后,此时这些消息则可用于被其他业务系统进行数据消费,也即由服务器将其他业务系统请求的数据推送至其他业务系统。当服务器检测到其他业务系统发送的消息读取指令,首先是创建与所述消息读取指令对应的当前消费队列。之后,还要基于消息读取指令获取到消息订阅信息和与所述消息订阅信息对应的目标索引文件,其中消息订阅信息中至少包括了消息订阅对象(也即可获知是哪一业务系统需要从服务器中获取消息),基于消息订阅信息的消息订阅对象还可以进一步确定目标索引文件。例如,该目标索引文件为索引文件仓库中已存储的多个索引文件中的其中一个索引文件,这一目标索引文件也是针对消息订阅对象的若干个索引文件中的其中一个。
在确定了目标索引文件后,还能得到与目标索引文件对应的若干个目标消息记录文件。此时先获取一个初始值为0的当前索引文件读指针,还能同时获取到所述目标索引文件的目标索引文件写指针;之后判断所述当前索引文件读指针是否小于或等于所述目标索引文件写指针;若确定所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,则表示此时能获取到所述当前索引文件读指针所指向的索引条目也即当前目标索引数据,并基于所述当前目标索引数据在对应的当前目标消息记录文件(当前目标消息记录文件是由目标索引文件所确定)中获取当前目标消息;然后将所述当前目标消息发送至所述当前消费队列,以由所述当前消费队列将所述当前目标消息推送至所述消息订阅信息对应的业务系统。
上述过程是描述了基于当前索引文件读指针对应在当前目标消息记录文件中获取一条当前目标消息并发送至业务系统的过程。之后,可以将当前索引文件读指针加一以更新所述当前索引文件读指针,并返回启动第四执行单元。这一循环读取的过程是在所述当前索引文件读指针首次大于所述目标索引文件的目标索引文件写指针时停止,通过上述过程可以将基于目标索引文件所能对应获取到的全部消息都完成读取并由当前消费队列推送至与所述消息订阅信息对应的业务系统。
在一实施例中,基于数据持久化的消息数据处理装置100中还包括:
第九执行单元,用于若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则确定所述当前索引文件读指针与所述目标索引文件的最大容量值的大小关系;
第十执行单元,用于若确定所述当前索引文件读指针不等于所述目标索引文件的最大容量值,则获取当前循环次数;其中,所述当前循环次数的初始值为0;
第十一执行单元,用于判断所述当前循环次数是否小于预设最大循环次数;
第十二执行单元,用于若确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数,并在睡眠预设睡眠时长后返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则表示基于目标索引文件所能对应获取到的全部消息都完成读取,此时需要进一步判断是否是因为所述当前索引文件读指针已经指向了所述目标索引文件的最大容量值。
若确定所述当前索引文件读指针不等于所述目标索引文件的最大容量值(更具体是所述当前索引文件读指针小于所述目标索引文件的最大容量值),则表示所述目标索引文件还能继续写入索引条目,而每一新写入的索引条目又能对应新存储至服务器中的消息。在此时可以先获取一个初始值为0的当前循环次数,然后判断所述当前循环次数是否小于预设最大循环次数。在确定了所述当前循环次数小于所述预设最大循环次数,则表示服务器可以先睡眠预设睡眠时长,且将所述当前循环次数加一以更新所述当前循环次数,之后返回启动第四执行单元。通过加入上述循环睡眠等待的机制,可以等待目标索引文件写入新的索引条目后,再去基于当前索引文件读指针去目标索引文件中去读取索引条目,并从相应的消息记录文件中获取消息并发送至对应的业务系统。
当然,在若确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数并睡眠预设睡眠时长之后,且在返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤之前,还需执行以下步骤:
若检测到所述目标索引文件存在更新,则对应更新所述目标索引文件写指针。
即在确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数并睡眠预设睡眠时长之后,一旦检测到目标索引文件存在更新且目标索引文件写指针发生了改变(一般是增大),则此时再返回启动第四执行单元则可以再基于当前索引文件读指针从目标索引文件中去读取索引条目并获取相应的消息以推送至业务系统。
在一实施例中,基于数据持久化的消息数据处理装置100还包括:
第十三执行单元,用于若确定所述当前索引文件读指针等于所述目标索引文件的最大容量值,则获取与所述消息订阅信息对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤。
在本实施例中,若确定所述当前索引文件读指针等于所述目标索引文件的最大容量值,则表示所述当前索引文件读指针已经指向了目标索引文件中的最后一条索引条目且不能再从目标索引文件中读取下一个索引条目,此时可以获取与所述消息订阅信息对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤。
也即,与消息订阅信息中消息订阅对象当前对应的目标索引文件的所有索引条目被读取完毕后,再去获取消息订阅对象对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤,此时仍需要将当前索引文件读指针初始设置为0后继续执行后续步骤。可见,通过上述方式,能对同一消息订阅对象的多个索引文件都进行读取以获取相应消息以推送至业务系统。
在一实施例中,基于数据持久化的消息数据处理装置100还包括:
第十四执行单元,用于若确定所述当前循环次数大于或等于所述预设最大循环次数,则对所述当前索引文件读指针对应增加读锁,以由所述读锁禁止基于所述当前索引文件读指针从所述目标索引文件中获取索引数据;
第十五执行单元,用于获取第一当前索引文件写指针并更新作为所述目标索引文件写指针;
第十六执行单元,用于若确定所述当前索引文件读指针小于所述目标索引文件写指针,则释放所述读锁,并返回执行所述获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据的步骤。
在本实施例中,若确定所述当前循环次数大于或等于所述预设最大循环次数,则表示服务器在读取目标索引文件的过程中已经睡眠过预设最大循环次数,且在这一过程中目标索引文件一直无新的索引条目写入而导致不能获取到消息推送至业务系统。为了有效节约服务器的系统资源,可对所述当前索引文件读指针对应增加读锁,以由所述读锁禁止基于所述当前索引文件读指针从所述目标索引文件中获取索引数据。
之后,若一旦目标索引文件中有新的索引条目写入,则会导致目标索引文件写指针发生改变(一般是增大),此时获取当前最新的第一当前索引文件写指针并更新作为所述目标索引文件写指针。之后,再释放所述读锁,并返回启动第五执行单元。
在一实施例中,基于数据持久化的消息数据处理装置100还包括:
第十七执行单元,用于若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,则增加阻塞线程。
在本实施例中,若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,也即表示所述当前索引文件读指针在目标索引文件中对应的指向位置中没有存储新的索引条目,此时可以增加一个阻塞线程,通过阻塞线程使得基于当前索引文件读指针不再能从目标索引文件中读取到索引条目。可见,基于阻塞线程可以避免当前索引文件读指针的读取请求对服务器继续占用系统资源所导致的系统拥塞。
在一实施例中,基于数据持久化的消息数据处理装置100还包括:
第十八执行单元,用于若检测到所述目标索引文件写指针的增大更新,则获取第二当前索引文件写指针并更新作为所述目标索引文件写指针,则解除所述阻塞线程,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
在本实施例中,上述过程中设置的阻塞线程会一直存在,直至目标索引文件中有新的索引条目写入(本质上是目标索引文件对应的当前目标消息记录文件有新的消息写入)才能唤醒该阻塞线程。此时在检测到所述目标索引文件写指针的增大更新,则获取第二当前索引文件写指针并更新作为所述目标索引文件写指针,因一定会至少有一次能判断出所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,故此时再次返回启动第四执行单元。
可见,实施该装置的实施例能对交易系统产生的业务数据结合消息记录文件和索引文件持久化写入,无需引入消息中间件,降低了运维成本,还能对存储的消息进行便捷的推送操作。
上述基于数据持久化的消息数据处理装置可以实现为一种计算机程序的形式,该计算机程序可以在如图6所示的计算机设备上运行。
请参阅图6,图6是本发明实施例提供的一种计算机设备的示意性框图。该计算机设备集成了本发明实施例所提供的任一种基于数据持久化的消息数据处理装置。
参阅图6,该计算机设备包括通过系统总线401连接的处理器402、存储器和网络接口405,其中,存储器可以包括存储介质403和内存储器404。
该存储介质403可存储操作系统4031和计算机程序4032。该计算机程序4032包括程序指令,该程序指令被执行时,可使得处理器402执行上述基于数据持久化的消息数据处理方法。
该处理器402用于提供计算和控制能力,以支撑整个计算机设备的运行。
该内存储器404为存储介质403中的计算机程序4032的运行提供环境,该计算机程序4032被处理器402执行时,可使得处理器402执行上述的基于数据持久化的消息数据处理方法。
该网络接口405用于与其它设备进行网络通信。本领域技术人员可以理解,图6中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器402用于运行存储在存储器中的计算机程序4032,以实现如上述的基于数据持久化的消息数据处理方法。
应当理解,在本发明实施例中,处理器402可以是中央处理单元(CentralProcessing Unit,CPU),该处理器402还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本发明还提供一种计算机可读存储介质。该计算机可读存储介质存储有计算机程序,其中计算机程序包括程序指令。该程序指令被处理器执行时使处理器执行如上述的基于数据持久化的消息数据处理方法。
所述计算机可读存储介质可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种基于数据持久化的消息数据处理方法,其特征在于,包括:
响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息;
基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件;
基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
2.根据权利要求1所述的方法,其特征在于,在所述基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件的步骤之后,所述方法还包括:
若检测到消息读取指令,则创建与所述消息读取指令对应的当前消费队列;
获取与所述消息读取指令对应的消息订阅信息和与所述消息订阅信息对应的目标索引文件;
获取当前索引文件读指针;其中,所述当前索引文件读指针的初始值为0;
判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针;
若确定所述当前索引文件读指针小于或等于所述目标索引文件的目标索引文件写指针,则获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据;
基于所述当前目标索引数据在对应的当前目标消息记录文件中获取当前目标消息;
将所述当前目标消息发送至所述当前消费队列,以由所述当前消费队列将所述当前目标消息推送至所述消息订阅信息对应的业务系统;
将当前索引文件读指针加一以更新所述当前索引文件读指针,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
3.根据权利要求2所述的方法,其特征在于,在所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤之后,所述方法还包括:
若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则确定所述当前索引文件读指针与所述目标索引文件的最大容量值的大小关系;
若确定所述当前索引文件读指针不等于所述目标索引文件的最大容量值,则获取当前循环次数;其中,所述当前循环次数的初始值为0;
判断所述当前循环次数是否小于预设最大循环次数;
若确定所述当前循环次数小于所述预设最大循环次数,则将所述当前循环次数加一以更新所述当前循环次数,并在睡眠预设睡眠时长后返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
4.根据权利要求3所述的方法,其特征在于,在所述若确定所述当前索引文件读指针大于所述目标索引文件的目标索引文件写指针,则确定所述当前索引文件读指针与所述目标索引文件的最大容量值的大小关系的步骤之后,所述方法还包括:
若确定所述当前索引文件读指针等于所述目标索引文件的最大容量值,则获取与所述消息订阅信息对应的下一个目标索引文件以更新作为所述目标索引文件,并返回执行所述获取当前索引文件读指针的步骤。
5.根据权利要求3所述的方法,其特征在于,在所述判断所述当前循环次数是否小于预设最大循环次数的步骤之后,所述方法还包括:
若确定所述当前循环次数大于或等于所述预设最大循环次数,则对所述当前索引文件读指针对应增加读锁,以由所述读锁禁止基于所述当前索引文件读指针从所述目标索引文件中获取索引数据;
获取第一当前索引文件写指针并更新作为所述目标索引文件写指针;
若确定所述当前索引文件读指针小于所述目标索引文件写指针,则释放所述读锁,并返回执行所述获取所述当前索引文件读指针在所述目标索引文件中的当前目标索引数据的步骤。
6.根据权利要求5所述的方法,其特征在于,在所述获取当前索引文件写指针并更新作为所述目标索引文件写指针的步骤之后,所述方法还包括:
若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,则增加阻塞线程。
7.根据权利要求6所述的方法,其特征在于,在所述若确定所述当前索引文件读指针大于或等于所述目标索引文件写指针,则增加阻塞线程的步骤之后,所述方法还包括:
若检测到所述目标索引文件写指针的增大更新,则获取第二当前索引文件写指针并更新作为所述目标索引文件写指针,则解除所述阻塞线程,并返回执行所述判断所述当前索引文件读指针是否小于或等于所述目标索引文件的目标索引文件写指针的步骤。
8.一种基于数据持久化的消息数据处理装置,其特征在于,包括:
待处理消息接收单元,用于响应于消息写入指令,则获取与所述消息写入指令相对应的待处理消息;
第一持久化写入单元,用于基于第一预设数据处理策略至少获取与所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体,并获取当前可写入消息记录文件,将所述待处理消息对应的消息类型、分区号、消息数据大小、消息校验码和消息体写入至所述当前可写入消息记录文件,以更新所述当前可写入消息记录文件;
第二持久化写入单元,用于基于第二预设数据处理策略至少获取与所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间,并获取当前可写入索引文件,将所述待处理消息对应的消息物理偏移量、消息数据大小和消息接收时间写入至所述当前可写入索引文件,以更新所述当前可写入索引文件。
9.一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的基于数据持久化的消息数据处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时可实现如权利要求1-7中任一项所述的基于数据持久化的消息数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410479666.3A CN118093522A (zh) | 2024-04-22 | 2024-04-22 | 基于数据持久化的消息数据处理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410479666.3A CN118093522A (zh) | 2024-04-22 | 2024-04-22 | 基于数据持久化的消息数据处理方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118093522A true CN118093522A (zh) | 2024-05-28 |
Family
ID=91155254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410479666.3A Pending CN118093522A (zh) | 2024-04-22 | 2024-04-22 | 基于数据持久化的消息数据处理方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118093522A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111522643A (zh) * | 2020-04-22 | 2020-08-11 | 杭州迪普科技股份有限公司 | 基于fpga的多队列调度方法、装置、计算机设备及存储介质 |
CN113312278A (zh) * | 2021-07-29 | 2021-08-27 | 常州楠菲微电子有限公司 | 一种静态可分配共享多队列缓存的装置及方法 |
CN114650301A (zh) * | 2022-03-17 | 2022-06-21 | 郑州郑大信息技术有限公司 | 一种基于交易系统的消息排队方法 |
-
2024
- 2024-04-22 CN CN202410479666.3A patent/CN118093522A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111522643A (zh) * | 2020-04-22 | 2020-08-11 | 杭州迪普科技股份有限公司 | 基于fpga的多队列调度方法、装置、计算机设备及存储介质 |
CN113312278A (zh) * | 2021-07-29 | 2021-08-27 | 常州楠菲微电子有限公司 | 一种静态可分配共享多队列缓存的装置及方法 |
CN114650301A (zh) * | 2022-03-17 | 2022-06-21 | 郑州郑大信息技术有限公司 | 一种基于交易系统的消息排队方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20130067492A1 (en) | Content-filter publish-subscribe system that optimizes interprocess communications | |
CN110888603B (zh) | 高并发数据写入方法、装置、计算机设备及存储介质 | |
CN111104448A (zh) | 大数据量Excel文件导出方法、装置、计算机设备及存储介质 | |
CN108459824B (zh) | 一种数据修改写方法及装置 | |
US9396089B2 (en) | Activity tracing diagnostic systems and methods | |
CN109710185A (zh) | 数据处理方法及装置 | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN113596010B (zh) | 一种数据处理方法、装置、节点设备及计算机存储介质 | |
CN113961153B (zh) | 一种索引数据写入磁盘的方法、装置及终端设备 | |
CN116909943B (zh) | 一种缓存访问方法、装置、存储介质及电子设备 | |
CN111291083B (zh) | 网页源码数据处理方法、装置及计算机设备 | |
CN113836184A (zh) | 一种业务持久化方法及装置 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN111930305A (zh) | 数据的存储方法和装置、存储介质、电子装置 | |
CN110297822B (zh) | 面向区块链的密钥管理方法、装置、设备及存储介质 | |
US10198378B2 (en) | Faster data transfer with simultaneous alternative remote direct memory access communications | |
CN112015563B (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
CN118093522A (zh) | 基于数据持久化的消息数据处理方法、装置及设备 | |
CN111435323B (zh) | 信息的传输方法、装置、终端、服务器及存储介质 | |
CA2788942C (en) | Content-filter publish-subscribe system that optimizes interprocess communications | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN109753325B (zh) | 桌面未读数更新方法、装置、应用及终端 | |
US20110302375A1 (en) | Multi-Part Aggregated Variable in Structured External Storage | |
CN112527896B (zh) | 区块链账本数据的处理方法、装置、存储介质及电子设备 | |
CN115878351B (zh) | 消息的传输方法及装置、存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |