一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

队列式消息写/读方法、装置及介质与流程

2023-10-06 16:28:49 来源:中国专利 TAG:


1.本公开至少涉及数据技术领域,尤其涉及一种队列式消息写/
2.读方法、队列式消息写/读装置以及计算机可读存储介质。


背景技术:

3.高并发请求访问下,一般采用消息队列对消息进行缓存处理,以达到流量削峰的目的。在跨模块消息通信时,也会采用消息队列对消息进行排序处理。对于消息队列的处理,目前比较常见的做法是在内存开辟一个队列空间来存储这些消息,当有新消息过来时,将消息顺序写入到内存队列的队尾,再由另一个线程去定时监控队列数据,不断地去处理队列里的数据。
4.由于传统模式下的消息队列一般存储在内存中,当服务发生宕机等情况时很容易导致数据丢失,这对一些安全性和数据一致性要求高的业务场景来说影响是很巨大的。因此,有必要提出更加可靠的队列式消息存储和写/读方案,避免将消息队列存储在内存中,以提高数据安全性。
5.公开内容
6.本公开所要解决的技术问题是针对现有技术的上述不足,提供一种队列式消息写/读方法、队列式消息写/读装置、计算机装置以及计算机可读存储介质,以解决如何提高消息队列式存储安全性以及在改变存储方式后如何实现便捷写/读的问题。
7.第一方面,本公开提供一种队列式消息写/读方法,所述方法包括:
8.响应于获取到消息写/读指令,根据控制文件中的控制参数在数据文件中写/读消息,其中,数据文件用于队列式存储消息;
9.响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,以使控制参数指示按顺序在数据文件中写/读消息。
10.在一实施方式中,响应于获取到消息写/读指令,具体包括:
11.响应于接收到待写入消息,或者,响应于接收到读取消息的指令。
12.在一实施方式中:
13.控制参数包括队列消息总数;
14.根据控制文件中的控制参数在数据文件中读消息,具体包括:
15.响应于判断出队列消息总数为零,阻塞消息读指令直至队列消息总数大于零;
16.响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,具体包括:
17.响应于在数据文件中写入/读取消息,将控制文件中的队列消息总数加/减1。
18.在一实施方式中:
19.控制参数包括读文件索引号、读位置偏移量、写文件索引号和写位置偏移量,数据文件的文件名中包括文件索引号;
20.根据控制文件中的控制参数在数据文件中写/读消息,具体包括:
21.根据消息写/读指令获取控制文件中的写/读文件索引号和写/读位置偏移量,
22.根据写/读文件索引号获取具有对应文件索引号的数据文件为写/读数据文件,
23.在写/读数据文件中对应写/读位置偏移量确定待写入/待读取消息的位置,
24.在待写入/待读取消息的位置写入消息/读取消息。
25.在一实施方式中:
26.控制文件具有固定的文件名称和文件大小,数据文件的文件名中还包括固定部分;
27.读文件索引号、写文件索引号、读位置偏移量和写位置偏移量,各自以固定字节数和整型变量的形式记录在控制文件中的固定位置。
28.在一实施方式中,响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,具体包括:
29.判断在写/读数据文件写入/读取消息是否会超过/到达文件末尾,如果是,响应于在数据文件中写入/读取消息,对控制文件中的写/读文件索引号和写/读位置偏移量进行更新,否则,响应于在数据文件中写入/读取消息,对控制文件中的写/读位置偏移量进行更新。
30.在一实施方式中:
31.数据文件有最大容量限制;
32.在写数据文件中对应写位置偏移量确定待写入消息的位置,具体包括:
33.响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息会超过写数据文件的最大容量限制,以写文件索引号加1作为文件索引号新建数据文件,并将新建数据文件的起始位置作为待写入消息的位置。
34.在一实施方式中:
35.数据文件中存储每个消息的消息长度和消息内容;
36.在待写入/待读取消息的位置写入消息/读取消息,具体包括:
37.在待写入/待读取消息的位置,按顺序写入消息长度和消息内容/先读取消息长度再按照消息长度读取消息内容。
38.在一实施方式中:
39.消息长度为固定长度的整数;
40.判断在写/读数据文件写入/读取消息是否会超过/到达文件末尾,如果是,响应于在数据文件中写入/读取消息,对控制文件中的写/读文件索引号和写/读位置偏移量进行更新,否则,响应于在数据文件中写入/读取消息,对控制文件中的写/读位置偏移量进行更新,具体包括:
41.响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息会超过写数据文件的最大容量限制,将控制文件中的写文件索引号加1、写位置偏移量更新为等于写入消息的消息长度的长度值加数值,
42.或者,响应于判断出读位置偏移量加上读取消息的消息长度的长度值加数值对应的位置没有数据,删除读数据文件,将控制文件中的读文件索引号加1、读位置偏移量更新为零,
43.或者,响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息不会超过写数据文件的最大容量限制/读位置偏移量加上读取消息的消息长度的长度
值加数值对应的位置有数据,将控制文件中的写/读位置偏移量更新为等于写入/读取消息的消息长度的长度值加数值。
44.第二方面,本公开提供一种队列式消息写/读装置,所述装置包括:
45.操作模块,用于响应于获取到消息写/读指令,根据控制文件中的控制参数在数据文件中写/读消息,其中,数据文件用于队列式存储消息;
46.更新模块,与操作模块连接,用于响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,以使控制参数指示按顺序在数据文件中写/读消息。
47.第三方面,本公开提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序被处理器运行时,实现如上所述的队列式消息写/读方法。
48.本公开提供一种队列式消息写/读方法、队列式消息写/读装置、计算机装置以及计算机可读存储介质,通过数据文件队列式存储消息,通过控制文件的控制参数对数据文件中的消息进行顺序写/读操作,在每次写/读操作后及时更新控制参数,使得对消息的写/读操作与队列消息的模式一致,利用文件存储结构实现对消息的队列式存储,利用控制参数指示消息按顺序在数据文件中先入先出,是一种可靠的队列式消息存储和写/读方案,避免了将消息队列存储在内存中,引发的在程序异常、宕机重启后会导致数据丢失的问题,提高了数据安全性,能够满足安全性和数据一致性要求高的业务场景下的数据写/读需求。
附图说明
49.图1是本公开实施例的一种队列式消息写/读方法的流程图;
50.图2是本公开实施例的一种队列式消息写方法的流程图;
51.图3是本公开实施例的一种队列式消息读方法的流程图;
52.图4是本公开实施例的一种队列式消息写/读装置的结构示意图。
具体实施方式
53.为使本领域技术人员更好地理解本公开的技术方案,下面将结合附图对本公开实施方式作进一步地详细描述。
54.可以理解的是,此处描述的具体实施例和附图仅仅用于解释本公开,而非对本公开的限定。
55.可以理解的是,在不冲突的情况下,本公开中的各实施例及实施例中的各特征可相互组合。
56.可以理解的是,为便于描述,本公开的附图中仅示出了与本公开相关的部分,而与本公开无关的部分未在附图中示出。
57.可以理解的是,本公开的实施例中所涉及的每个单元、模块可仅对应一个实体结构,也可由多个实体结构组成,或者,多个单元、模块也可集成为一个实体结构。
58.可以理解的是,在不冲突的情况下,本公开的流程图和框图中所标注的功能、步骤可根据不同于附图中所标注的顺序发生。
59.可以理解的是,本公开的流程图和框图中,示出了根据本公开各实施例的系统、装置、设备、方法的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可代
表一个单元、模块、程序段、代码,其包含用于实现规定的功能的可执行指令。而且,框图和流程图中的每个方框或方框的组合,可用实现规定的功能的基于硬件的系统实现,也可用硬件与计算机指令的组合来实现。
60.可以理解的是,本公开实施例中所涉及的单元、模块可通过软件的方式实现,也可通过硬件的方式来实现,例如单元、模块可位于处理器中。
61.实施例1:
62.如图1所示,本公开提供一种队列式消息写/读方法,所述方法包括:
63.s11、响应于获取到消息写/读指令,根据控制文件中的控制参数在数据文件中写/读消息,其中,数据文件用于队列式存储消息;
64.s12、响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,以使控制参数指示按顺序在数据文件中写/读消息。
65.具体而言,在本实施例中,为了实现利用文件存储结构实现消息的队列式存储,并对文件中的消息执行队列式的写入和读取操作,本实施例设置两种类型的文件,一种是控制文件,用于在其中记录执行队列式的写入和读取操作的控制参数,其中的参数需要根据每次写/读操作及时更新,以实现对消息执行队列式的写入和读取操作,另一种是数据文件,用于存储消息,由于消息是在控制参数的控制下顺序写入的,因此其中的消息是队列式存储的,从而也便于按顺序读取数据文件中存储的消息。使用数据文件以队列方式存储消息,利用控制文件顺序执行对数据文件进行写入或读取消息的操作,从而避免将队列消息存储在内存中,因文件中的消息是按照队列模式顺序存储的,所以能减少碎片文件,提升存储效率,提高磁盘读写性能。在对大量数据进行缓存处理、后处理的应用场景中,或对数据完整性要求严格的跨模块通信领域,均可以使用本实施例所述的方法,提升数据安全性,进而提升系统稳定性。队列数据存储在文件中,内存占用极低,数据安全性高,即使进程重启也不会丢失数据。本实施例一种可能的数据文件形式是linux文件,因linux文件存储非常稳定高效,所以基于linux的文件存储实现的队列文件存储也是稳定高效的,以linux文件实现消息队列模式,可以进一步提升系统使用体验。
66.在一实施方式中,响应于获取到消息写/读指令,具体包括:
67.响应于接收到待写入消息,或者,响应于接收到读取消息的指令。
68.具体而言,在本实施例中,消息写/读指令可以是接收到待写入消息/接收到读取消息的指令,如果接收到待写入消息则启动消息入队流程,通过对待写入消息执行顺序写入数据文件的操作实现将消息插入队列,如果接收到读取消息的指令则启动消息出队流程,通过从数据文件中顺序读取消息实现消息出队。
69.在一实施方式中:
70.控制参数包括队列消息总数;
71.根据控制文件中的控制参数在数据文件中读消息,具体包括:
72.响应于判断出队列消息总数为零,阻塞消息读指令直至队列消息总数大于零;
73.响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,具体包括:
74.响应于在数据文件中写入/读取消息,将控制文件中的队列消息总数加/减1。
75.具体而言,在本实施例中,可以通过在控制文件中设置队列消息总数作为控制参数之一,用于记录当前所有存储的未出队消息,在每次执行完写入/读取消息后,队列消息
总数更新为原基础上加/减1后的数值,队列消息总数的至少一个作用是在执行消息出队操作时,判断队列中是否已有数据,如果还没有数据,则需要先等待至少完成一次消息入队操作后,方可读取到消息。
76.在一实施方式中:
77.控制参数包括读文件索引号、读位置偏移量、写文件索引号和写位置偏移量,数据文件的文件名中包括文件索引号;
78.根据控制文件中的控制参数在数据文件中写/读消息,具体包括:
79.根据消息写/读指令获取控制文件中的写/读文件索引号和写/读位置偏移量,
80.根据写/读文件索引号获取具有对应文件索引号的数据文件为写/读数据文件,
81.在写/读数据文件中对应写/读位置偏移量确定待写入/待读取消息的位置,
82.在待写入/待读取消息的位置写入消息/读取消息。
83.具体而言,在本实施例中,控制文件中包括四个最重要的控制参数:读文件索引号、读位置偏移量、写文件索引号和写位置偏移量,用于控制实现消息入队和出队的过程,对应地,用于存储消息的数据文件在其文件名中需要包括文件索引号,以便于根据控制参数中的文件索引号找到需要操作的数据文件,再根据控制参数中的位置偏移量找到在对应数据文件中写入或读取消息的位置,从而实现队列式的消息写/读操作。
84.在一实施方式中:
85.控制文件具有固定的文件名称和文件大小,数据文件的文件名中还包括固定部分;
86.读文件索引号、写文件索引号、读位置偏移量和写位置偏移量,各自以固定字节数和整型变量的形式记录在控制文件中的固定位置。
87.具体而言,在本实施例中,控制文件和数据文件的文件名称均具有固定的特征,便于定位到该类文件,控制文件是唯一的且大小也是固定的,其中包括固定的几种控制参数,每种控制参数采用固定长度和形式记录,每次操作完成后,更新对应的控制参数以便于下次执行写/读操作,控制参数在控制文件中的位置也固定,这样每次操作只需根据指令读取对应位置、对应长度的控制参数,并根据其是整型变量获得其参数值,根据参数值完成相应操作即可。
88.在一实施方式中,响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,具体包括:
89.判断在写/读数据文件写入/读取消息是否会超过/到达文件末尾,如果是,响应于在数据文件中写入/读取消息,对控制文件中的写/读文件索引号和写/读位置偏移量进行更新,否则,响应于在数据文件中写入/读取消息,对控制文件中的写/读位置偏移量进行更新。
90.具体而言,在本实施例中,在写入消息时可能会存在数据文件中剩余长度不足以写下完整的待写入消息的情况,这就使得执行写入消息之前需要判断数据文件剩余长度是否足够,如果不够需要将待写入消息写入新的数据文件中,此时控制文件中的写文件索引号需要更新,以指示之后将在新的数据文件中继续写入消息,对于读取消息的情况,则需要判断是否读完当前数据文件中的最后一个消息,如果已经读完需要指示下一次将读取下一个数据文件,而写/读位置偏移量则每次均需要更新。
91.在一实施方式中:
92.数据文件有最大容量限制;
93.在写数据文件中对应写位置偏移量确定待写入消息的位置,具体包括:
94.响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息会超过写数据文件的最大容量限制,以写文件索引号加1作为文件索引号新建数据文件,并将新建数据文件的起始位置作为待写入消息的位置。
95.具体而言,在本实施例中,为了便于文件管理,数据文件有一定的文件大小限制(即最大容量限制),因此对于写入消息的情况,需要预判其是否会超出对应写数据文件的最大容量,如果会超出则需要新建一个数据文件,在新建的数据文件中写入当前待写入消息。可以理解的是,本实施例不需要严格限定图1中步骤s11和步骤s12执行顺序,如对于写入消息的情况,在写入操作执行之前,可以在控制文件中更新写文件索引号指向新建数据文件,也可以将写位置偏移量归零指向新建数据文件的起始位置,这些细节上的调整不脱离本发明的思路,因此仍在本技术所请求保护的范围之内。
96.在一实施方式中:
97.数据文件中存储每个消息的消息长度和消息内容;
98.在待写入/待读取消息的位置写入消息/读取消息,具体包括:
99.在待写入/待读取消息的位置,按顺序写入消息长度和消息内容/先读取消息长度再按照消息长度读取消息内容。
100.具体而言,在本实施例中,由于消息的长度和消息中包含的数据内容不是固定的,为了便于读取数据,需要在数据文件中按照将消息长度写在消息内容之前的顺序,同时写入消息长度和消息内容,每次读取消息时,在找到读取位置之后,先读取消息长度,在根据消息长度的数值读取对应长度的消息内容。
101.在一实施方式中:
102.消息长度为固定长度的整数;
103.判断假定或实际在写/读数据文件写入/读取消息是否会到达文件末尾,如果是,响应于实际在数据文件中写入/读取消息,对控制文件中的写/读文件索引号和写/读位置偏移量进行更新,否则,响应于实际在数据文件中写入/读取消息,对控制文件中的写/读位置偏移量进行更新,具体包括:
104.响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息会超过写数据文件的最大容量限制,将控制文件中的写文件索引号加1、写位置偏移量更新为等于写入消息的消息长度的长度值加数值,
105.或者,响应于判断出读位置偏移量加上读取消息的消息长度的长度值加数值对应的位置没有数据,删除读数据文件,将控制文件中的读文件索引号加1、读位置偏移量更新为零,
106.或者,响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息不会超过写数据文件的最大容量限制/读位置偏移量加上读取消息的消息长度的长度值加数值对应的位置有数据,将控制文件中的写/读位置偏移量更新为等于写入/读取消息的消息长度的长度值加数值。
107.具体而言,在本实施例中,消息长度可以固定为32位整型整数,控制参数均可以固
定为32位整型变量,32位整型存储的数据占4个字节,这样每次执行写/读操作后可以便捷地计算出需要更新的写/读位置偏移量,一个数据文件中的消息被全部读取完成后则可以删除该数据文件以节约存储资源,数据文件中已有本次写入/读取的消息则说明已经执行了本次写入/读取操作。
108.如上所述方法的一个更具体的示例包括:1)定义和建立控制文件、2)定义数据文件、3)消息入队操作、4)消息出队操作,具体流程如下:
109.1)定义和建立控制文件,控制文件有且只有一个,控制文件中记录读写数据文件以及读写位置偏移量等信息,控制文件的文件名称固定、文件大小固定,控制文件中一共存储5个控制参数,分别是读文件索引号、读位置偏移量、写文件索引号、写位置偏移量和队列消息总数,每个控制参数都具有相等的固定字节数,设置在控制文件中的固定位置,具体可以设置为5个32位整型变量,控制文件的结构定义如下表1所示:
110.表1控制文件的结构
[0111][0112]
控制文件参数定义:
[0113]
a.读文件索引号,由控制文件内容中的第1-4字节组成,指示当前待读取的数据文件的文件名中包含的文件索引号,根据该文件索引号锁定读数据文件,以待从中读取消息;
[0114]
b.读位置偏移量,由控制文件内容中的第5-8字节组成,指示从当前待读取的数据文件中读取消息的位置,以在读数据文件中读取该位置对应的消息,每次读取一个消息后应将该位置向后偏移至下一位消息处,以使下一次读取到读数据文件中的下一个消息,直至读完一个数据文件时,处理读文件索引号指向下一个数据文件;
[0115]
c.写文件索引号,由控制文件内容中的第9-12字节组成,指示当前预期写入消息的数据文件的文件名中包含的文件索引号,根据该文件索引号锁定写数据文件,以待向其中写入消息;
[0116]
d.写位置偏移量,由控制文件内容中的第13-16字节组成,指示向写数据文件中写入消息的位置,在写入消息前可判断写入数据是否会超过写数据文件的最大容量,如果会超过,需要新建一个数据文件,进行本次和之后的消息写入;
[0117]
e.队列消息总数,由控制文件内容中的第17-20字节组成,用于记录当前消息队列中共有多少个消息。
[0118]
2)定义数据文件,数据文件可以有多个,其文件名按照固定名称 文件索引号的方式动态生成,文件索引号可以由0开始、顺序递增,例如:data_0.dat,data_1.dat,数据文件存储时,将消息顺序存储在文件中,每个消息包含两部分:
[0119]
a.消息长度,固定为32位整型数,用于指示本条消息的长度,每条消息写入时,在写数据文件中,先在与写位置偏移量对应的位置记录该条消息的长度,接着在其后写入该条消息的内容,本条消息在数据文件中所占总长度即为4字节 该条消息长度的数值,然后将控制文件中的写位置偏移量在原基础上加上4字节 该条消息长度的数值,数据文件大小有最大容量限制,写入数据时超过最大容量限制,需要关闭当前写数据文件,并重新创建一个新数据文件,新数据文件的文件索引号在上一个文件索引号基础上顺序加1,并更新控制文件中的写文件索引号(加1)和写位置偏移量(归零),在写入消息后写位置偏移量在原基础上加上4字节 该条消息长度的数值;
[0120]
b.消息内容,长度等于消息长度,消息内容根据实际接收到的消息不同而不同,每条消息读取时,在读数据文件中,先读取与读位置偏移量对应位置的消息长度数值,再根据消息长度数值读取对应长度的消息内容,然后将控制文件中的读位置偏移量在原基础上加上4字节 该条消息长度的数值,由于数据文件有最大容量限制,读取数据时,如果已经读取到读数据文件末尾,可以删除该读数据文件,并更新控制文件中的读文件索引号(加1)和读位置偏移量(归零);
[0121]
数据文件的结构示例如下表2所示:
[0122]
表2数据文件的结构示例
[0123][0124]
3)消息入队操作,具体包括如图2所示的步骤:
[0125]
s011、队列插入,在接收到消息写入指令后,确定执行队列插入,即需要在数据文件中插入当前接收到的待写入消息;
[0126]
s012、根据控制文件可写文件索引号打开当前可写数据文件,先在控制文件中读取写文件索引号,打开写文件索引号对应的那个数据文件作为写数据文件;
[0127]
s013、判断数据文件是否超过大小限制,判断数据文件已有的大小加上当前待写入消息的大小是否会超过设定的数据文件允许的最大容量;
[0128]
s014、如果步骤s013的判断结果为是,关闭当前数据文件,新建一个数据文件;控制文件文件索引号加1,文件偏移位置归零,如果写入当前消息会超过数据文件的大小限制,则新建一个数据文件作为新的写数据文件,新建的数据文件符合2)中定义的各项要求,从新建数据文件的起始位置开始写入当前待写入数据;
[0129]
s015、如果步骤s013的判断结果为否或者执行了步骤s014后,数据文件写入消息长度和消息内容,在当前打开的数据文件中按照表2的要求写入待写入消息的消息长度和消息内容;
[0130]
s016、控制文件更新可写文件偏移量,将控制文件中的写文件偏移量这个控制参数更新,更新后的数值为原数值加上步骤s015写入消息的消息长度和消息内容的总长度;
[0131]
s017、通知队列可进行出队操作,此时数据文件中有消息等待读取。
[0132]
4)消息出队操作,具体包括如图3所示的步骤:
[0133]
s021、队列出队,在接收到消息读取指令后,确定执行队列出队,即需要从数据文件中按要求读取消息;
[0134]
s022、根据控制文件可读文件索引号打开当前可读数据文件,先在控制文件中读取读文件索引号,打开读文件索引号对应的那个数据文件作为读数据文件;
[0135]
s023、判断队列消息数量是否大于零,根据控制参数中的队列消息总数来判断,如果大于零说明数据文件中有数据可以读取;
[0136]
s024、如果步骤s023的判断结果为不大于零,阻塞等待入队完成,如果队列消息总数等于零则数据文件中还没有数据,需要等待至少执行一次写入操作后才可以执行消息读取;
[0137]
s025、如果步骤s023的判断结果为大于零或者执行了步骤s024后已有数据入队,根据控制文件可读文件索引号和文件位置偏移量读取数据文件消息内容,读取读数据文件中对应的消息内容,读数据文件中的消息长度用于指示读取哪些内容,消息长度无需反馈给消息读取指令的发出者;
[0138]
s026、判断当前可读文件偏移量是否到达文件尾,判断当前读数据文件是否已经被读完,可以根据读位置偏移量与读取到的消息来判断;
[0139]
s027、如果步骤s026的判断结果为到达文件尾,删除当前可读数据文件,控制文件中可读文件索引号加1,偏移量归零,并重新打开当前数据文件,如果当前读数据文件已经被读完则可以删除该文件,并指示下一次读取文件索引号加1的数据文件,且下一次从新指向的数据文件的起始位置开始读取;
[0140]
s028、如果步骤s026的判断结果为没有到达文件尾,控制文件中更新可读文件偏移量,如果当前读数据文件还没有被读完,则下一次继续读取当前读数据文件,且读取当前数据文件的下一个消息;
[0141]
s029、结束,本次消息读取结束,可向消息读取指令的发出者反馈读取到的消息内容。
[0142]
实施例2:
[0143]
如图4所示,本公开提供一种队列式消息写/读装置,所述装置包括:
[0144]
操作模块11,用于响应于获取到消息写/读指令,根据控制文件中的控制参数在数据文件中写/读消息,其中,数据文件用于队列式存储消息;
[0145]
更新模块12,与操作11连接,用于响应于在数据文件中写/读消息,对控制文件中的控制参数进行更新,以使控制参数指示按顺序在数据文件中写/读消息。
[0146]
在一实施方式中,所述装置中包括:
[0147]
接收模块,用于接收待写入消息,或者,用于接收读取消息的指令。
[0148]
在一实施方式中:
[0149]
控制参数包括队列消息总数;
[0150]
操作模块11包括读操作单元,具体包括:
[0151]
等待子单元,用于响应于判断出队列消息总数为零,阻塞消息读指令直至队列消息总数大于零;
[0152]
更新模块12,具体包括:
[0153]
队列消息总数更新单元,用于响应于在数据文件中写入/读取消息,将控制文件中的队列消息总数加/减1。
[0154]
在一实施方式中:
[0155]
控制参数包括读文件索引号、读位置偏移量、写文件索引号和写位置偏移量,数据文件的文件名中包括文件索引号;
[0156]
操作模块11,具体包括:
[0157]
参数获取单元,用于根据消息写/读指令获取控制文件中的写/读文件索引号和写/读位置偏移量,
[0158]
文件获取单元,与参数获取单元连接,用于根据写/读文件索引号获取具有对应文件索引号的数据文件为写/读数据文件,
[0159]
位置获取单元,与文件获取单元连接,用于在写/读数据文件中对应写/读位置偏移量确定待写入/待读取消息的位置,
[0160]
操作单元,与位置获取单元连接,用于在待写入/待读取消息的位置写入消息/读取消息。
[0161]
在一实施方式中:
[0162]
控制文件具有固定的文件名称和文件大小,数据文件的文件名中还包括固定部分;
[0163]
读文件索引号、写文件索引号、读位置偏移量和写位置偏移量,各自以固定字节数和整型变量的形式记录在控制文件中的固定位置。
[0164]
在一实施方式中,更新模块12,具体用于:
[0165]
判断在写/读数据文件写入/读取消息是否会超过/到达文件末尾,如果是,响应于在数据文件中写入/读取消息,对控制文件中的写/读文件索引号和写/读位置偏移量进行更新,否则,响应于在数据文件中写入/读取消息,对控制文件中的写/读位置偏移量进行更新。
[0166]
在一实施方式中:
[0167]
数据文件有最大容量限制;
[0168]
位置获取单元包括写位置获取子单元,具体用于:
[0169]
响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息会超过写数据文件的最大容量限制,以写文件索引号加1作为文件索引号新建数据文件,并将新建数据文件的起始位置作为待写入消息的位置。
[0170]
在一实施方式中:
[0171]
数据文件中存储每个消息的消息长度和消息内容;
[0172]
操作单元,具体用于:
[0173]
在待写入/待读取消息的位置,按顺序写入消息长度和消息内容/先读取消息长度再按照消息长度读取消息内容。
[0174]
在一实施方式中:
[0175]
消息长度为固定长度的整数;
[0176]
更新模块12,具体包括:
[0177]
第一更新单元,用于响应于判断出在写数据文件中从对应写位置偏移量的位置开
始写入待写入消息会超过写数据文件的最大容量限制,将控制文件中的写文件索引号加1、写位置偏移量更新为等于写入消息的消息长度的长度值加数值,
[0178]
第二更新单元,用于响应于判断出读位置偏移量加上读取消息的消息长度的长度值加数值对应的位置没有数据,删除读数据文件,将控制文件中的读文件索引号加1、读位置偏移量更新为零,
[0179]
第三更新单元,用于响应于判断出在写数据文件中从对应写位置偏移量的位置开始写入待写入消息不会超过写数据文件的最大容量限制/读位置偏移量加上读取消息的消息长度的长度值加数值对应的位置有数据,将控制文件中的写/读位置偏移量更新为等于写入/读取消息的消息长度的长度值加数值。
[0180]
实施例3:
[0181]
本公开实施例3提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序被处理器运行时,实现如实施例1所述的队列式消息写/读方法,或如实施例2所述的队列式消息写/读装置。
[0182]
所述计算机可读存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、计算机程序模块或其他数据)的任何方法或技术中实施的易失性或非易失性、可移除或不可移除的介质。计算机可读存储介质包括但不限于ram(random access memory,随机存取存储器),rom(read-only memory,只读存储器),eeprom(electrically erasable programmable read only memory,带电可擦可编程只读存储器)、闪存或其他存储器技术、cd-rom(compact disc read-only memory,光盘只读存储器),数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。
[0183]
另外,本公开还可以提供一种计算机装置,包括存储器和处理器,所述存储器中存储有计算机程序,当所述处理器运行所述存储器存储的计算机程序时,所述处理器执行如实施例1所述的队列式消息写/读方法,该计算机装置可以是如实施例2所述的队列式消息写/读装置。
[0184]
其中,存储器与处理器连接,存储器可采用闪存或只读存储器或其他存储器,处理器可采用中央处理器或单片机。
[0185]
本公开实施例1-3提供一种队列式消息写/读方法、队列式消息写/读装置、计算机装置以及计算机可读存储介质,通过数据文件队列式存储消息,通过控制文件的控制参数对数据文件中的消息进行顺序写/读操作,在每次写/读操作后及时更新控制参数,使得对消息的写/读操作与队列消息的模式一致,利用文件存储结构实现对消息的队列式存储,利用控制参数指示消息按顺序在数据文件中先入先出,是一种可靠的队列式消息存储和写/读方案,避免了将消息队列存储在内存中,引发的在程序异常、宕机重启后会导致数据丢失的问题,提高了数据安全性,能够满足安全性和数据一致性要求高的业务场景下的数据写/读需求。
[0186]
可以理解的是,以上实施方式仅仅是为了说明本公开的原理而采用的示例性实施方式,然而本公开并不局限于此。对于本领域内的普通技术人员而言,在不脱离本公开的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本公开的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表