CN112148441A - 一种动态储存方式的嵌入式消息队列实现方法 - Google Patents
一种动态储存方式的嵌入式消息队列实现方法 Download PDFInfo
- Publication number
- CN112148441A CN112148441A CN202010441711.8A CN202010441711A CN112148441A CN 112148441 A CN112148441 A CN 112148441A CN 202010441711 A CN202010441711 A CN 202010441711A CN 112148441 A CN112148441 A CN 112148441A
- Authority
- CN
- China
- Prior art keywords
- data
- message
- message queue
- length
- embedded
- 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
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000012545 processing Methods 0.000 claims abstract description 16
- 238000013507 mapping Methods 0.000 claims abstract description 15
- 238000011161 development Methods 0.000 claims abstract description 12
- 238000013500 data storage Methods 0.000 claims abstract description 11
- 238000004806 packaging method and process Methods 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 claims description 10
- 238000012423 maintenance Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 19
- 230000007246 mechanism Effects 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种动态储存方式的嵌入式消息队列实现方法,所述实现方法包括以下步骤:步骤I:消息推送;步骤II:消息获取;步骤III:服务内嵌。该动态储存方式的嵌入式消息队列实现方法,利用磁盘映射技术使用虚拟内存,共享内存技术,内存储器以及本地磁盘四种方式的情况下,通过相应封装处理,将整个服务程序打包整理为嵌入式程序,使用户能根据自身计算机实际情况使用嵌入式消息队列动态选择数据储存位置,充分利用计算机,节省计算机资源,同时本技术瞬时并发支持量大,属于嵌入式服务范畴,不需要启动单独服务程序,引入开发包即可使用,使其能符合中小型项目的需要,能够适应市面上所有系统,达到开发方便,节约开发成本的目的。
Description
技术领域
本发明涉及计算机技术及任务调度技术领域,具体为一种动态储存方式 的嵌入式消息队列实现方法。
背景技术
在进行人脸识别相关软件的开发过程中,经常会涉及到大量数据信息处 理,这些数据通常是摄像头抓拍的图片数据,具有单条数据体量大,瞬时并 发量高等特点,由于市面上所有消息队列,都需要单独启动应用程序来为消 息队列提供服务,这些为消息队列提供服务的应用程序会占用大量的计算机 资源,且无法避免,但是所提供的服务中有很多附加服务是在一般中小型项 目中用不到的,所以会造成不可避免的资源浪费,所以在此过程中需要使用 一款性能合适的消息队列服务来处理这些图片数据,在考虑项目成本的前提下,针对中低档服务器,选择一款性价比高的消息队列服务尤为重要。
在现有技术中,例如申请公布号为CN110377486A的中国发明专利中提出 的一种基于kafka实现稳定的高吞吐量的异步任务处理方法。采用基于kafka 的异步任务模式,对于异步任务的处理机制,采用管理线程来监控工作线程 的各种活动情况并结合定时任务来按照监控间隔时间的频率输出异步任务的 执行情况,提供对于超时任务处理机制和异常任务处理机制,增加监控任务 消费情况,统计任务执行时间、任务完成详细情况,可通过统计情况来优化 调整参数,此统计信息会写入日志,用户可以通过日志来分析性能。本发明 能够大大降低系统于业务系统的耦合性;
但其仍存在一定的弊端,如:
1、虽然采用基于kafka的异步任务模式,降低业务系统的耦合性,使系 统不会因为一个子任务进程崩溃时影响整个任务的执行,但是由于采用此种 任务模式,可能会造成数据不一致的情况,不能保证数据完整性;
2、此种技术提供了超时任务机制和异常任务机制来监控任务消费情况, 通过统计大量数据来优化参数,增加子任务程序的产生,占用大量计算机资 源,使整个消息队列机制变得过于庞大,影响计算机性能;
3、此种技术的数据储存方式单一,通过消耗大量内存空间以及搭建分布 式服务来换取高数据量的处理。
4、此技术需要安装Kafka exe服务应用程序,使用麻烦,服务体量大、 成本高。
同时,又如申请公布号为CN103645942A的中国发明专利中提出一种基于 消息队列的共享内存写入及读取方法和系统,共享内存写入方法包括:采用 所述消息队列执行多线程进队push以及单线程出队pop的操作;将所述单线 程出队pop的数据写入共享内存。本发明解决了线程间通信时阻塞的问题, 减少了资源消耗,充分利用了系统资源,提高了处理速度,从而提高了计算 机吞吐量;
但其也存在一定的弊端,如:
1、虽然此技术通过使用共享内存的方式,解决了通信阻塞的问题,但由 于其是基于分布式服,并未解决共享内存同步机制缺失的问题,需要使用额 外的同步机制确保不出现竟态条件;
2、此种技术的数据储存方式单一,通过消耗大量RAM内存空间以及搭建 分布式服务来换取高数据量的处理。
此外,又如申请公布号为CN105138410A的中国发明专利中公开了一种基 于磁盘缓存的消息队列的实现方法及装置。所述方法包括创建监控线程以按 照预设的周期值周期性的监控消息队列中的消息量;在所述消息量达到预设 的消息上限值时,将再接收到的消息转换为二进制序列串,将所述二进制序 列串顺序写入预先确定的磁盘文件,记录所述磁盘文件的写入的消息量和写 入消息的偏移位置;在所述消息量达到预设的消息下限值时,从所述预先确 定的磁盘文件中顺序读取消息,将所述消息写入所述消息队列,记录读取的 消息量和读取消息的偏移位置。本发明解决分布式系统中多个主机之间快速 传递消息时的完整性问题,达到了在保障消息传递速度的同时保障消息完整 性的效果;
但其也存在一定的弊端,如:
1、此技术使用分布式消息队列,通过磁盘缓存来保证分布式服务之间消 息的完整性问题,但是由于其本身服务较为庞大,使用成本较高,并不适合 中小型项目使用,只能在大型项目中使用,因此该种技术在中小型项目中受 众面比较窄;
2.此技术由于对数据量支持并不大,所以需要使用分布式来进行数据储 存,极大的浪费了计算机资源;
3.此种技术的数据储存方式单一,需要搭建分布式服务来换取高数据量 的处理。
因此,为了解决上述现有技术中存在的问题,我们提出一种动态储存方 式的嵌入式消息队列实现方法。
发明内容
本发明的目的在于提供一种动态储存方式的嵌入式消息队列实现方法, 以解决上述背景技术提出的目前现有技术背景下,仍没有一种方法能够使用 户能根据自身计算机实际情况动态选择数据储存位置,进行单机充分利用计 算机,节省计算机资源,无法将消息队列服务内嵌与开发程序中,都需要启 动单独服务程序,造成大量的服务浪费,并且开发不便,不利于节约成本, 同时不能够适应各种系统的问题。
为实现上述目的,本发明提供如下技术方案:一种动态储存方式的嵌入 式消息队列实现方法,所述实现方法包括以下步骤:
步骤I:消息推送;
步骤II:消息获取;
步骤III:服务内嵌。
优选的,所述实现方法采用多线程进队push以及单线程出队pop操作, 且存在多个消息队列时,选定用当前第一消息队列,同时制定消息队列每个 储存子模块大小为32M,且依次增加储存模块数量。
优选的,所述实现方法采用多种数据储存方式:1、虚拟内存:允许通过 使用channel的map映射方法申请一个私有的虚拟内存空间,该空间是通过 映射磁盘得来的;2、共享内存:允许通过使用channel的map映射方法申请 一个可读可写的共享内存空间;3、磁盘:允许通过调用API(类似java)中 的Random Access File方法申请一个磁盘空间;4、内存:原则上数据已经 在内存中。
优选的,所述步骤I提出的消息推送包含以下步骤:步骤1、申请一个 32M储存子模块;步骤2、消息入队请求;步骤3、将所要入队的消息转换为 二进制数据byte,此时消息数据的大小为n以及长度为m;步骤4、判断数据 有效性,即n,m为大于0的正整数;若数据无效,则转回进行步骤2;若数 据有效,则继续进行;步骤5、将数据大小n转化为4字节数据,添加到该数 据的数据头,作为长度标识;步骤6、检查数据的长度是否超出所使用子模块 储存空间的长度界限;若超出所使用储存空间长度界限,则进行步骤1;若未 超出所使用储存空间长度界限,则继续进行;步骤7、获取该内存的写偏移指 针pWrite;步骤8、判断数据是否可写;若不可写,则进行第二步;若可写, 则继续进行;步骤9、根据写偏移指针pWrite,以及数据长度m,确定数据在 储存空间中的写入位置;步骤10、写入数据,即写偏移指针pWrite向后移动 数据大小。
优选的,所述步骤6中判断数据的长度是否超出所使用子模块储存空间 的长度界限的方法为:在每次存入数据时,根据每条数据长度,累加计数参 数Store Length,且每次在存入数据时判断计数参数Store Length大小。
优选的,所述步骤II提出的消息获取包含以下步骤:步骤11、判断系统 状态;如系统工作不正常,则在手动请求执行后,继续进行;若系统工作正 常,则继续进行;步骤12、从消息队列储存子模块中获取一条数据;;步骤 13、检查数据消费情况;判断数据消费情况;若数据已被消费,则执行步骤 12;若数据未被消费,则继续执行;步骤14、将数据转化为执行对象;根据 获取的二进制数据byte前四位字节,得到大小n;从内存中申请数据n大小 的空间,为消息对象分配内存;将二进制数据byte转化为消息对象(如: String);步骤15、通知用户。
优选的,所述步骤12中获取数据后,线程获取数据头前四字节(代表该 条数据大小n),且将数据大小n转化为浮点型对象,并且递减该子模块计数 参数Store Length;同时读偏移指针pRead向后移动数据长度,即指向下一 条数据。
优选的,所述步骤13中检查数据消费情况是指:向数据状态参数data Read加入线程安全锁;验证数据状态参数data Read。
优选的,所述服务内嵌包含以下步骤:
步骤16、将所有消息队列所包含的功能点模块化;
步骤17、将所有模块化的功能点进行整合,通过数据流向进行内联;
步骤18、通过ide工具将服务进行打包,生成可兼容所有操作系统的二 次开发服务包;
步骤19、在开发程序中引入服务包,将嵌入式消息队列内嵌于开发程序 中;
步骤20、嵌入式消息队列开始工作,服务会进行自动维护阶段等。
与现有技术相比,本发明的有益效果是:该动态储存方式的嵌入式消息 队列实现方法,利用磁盘映射技术使用虚拟内存,共享内存技术,内存储器 以及本地磁盘四种方式的情况下,通过相应封装处理,将整个服务程序打包 整理为嵌入式程序,使用户能根据自身计算机实际情况使用嵌入式消息队列 动态选择数据储存位置,充分利用计算机,节省计算机资源,同时本技术瞬 时并发支持量大,属于嵌入式服务范畴,不需要启动单独服务程序,引入开 发包即可使用,使其能符合中小型项目的需要,能够适应市面上所有系统, 达到开发方便,节约开发成本的目的;
1.支持用户动态选择储存空间,充分利用计算机资源;
2.算法优异性,及时处理瞬时高并发;
3.无需基于分布式服务,可基于单机运行,处理速度每秒高达10多万次, 在使用更少资源的情况下与kafka处理速度相当;
4.磁盘空间足够的情况下处理的消息量无限大;
5.计算机出现宕机,不会丢失数据,保证数据完整性;
6.无须独立安装exe服务程序,具备嵌入式能力,只需引入开发包(如 jar、.so等开发包),即可使用;
7.处理方式可在内存、磁盘中随意切换,兼容性高,能够适应市面上包 括windows、linux、Android和arm linux等的所有系统。
附图说明
附图是本发明的一部分,结合说明书用来进一步描述本发明的实施过程。
图1为本发明实施例提供的消息推送数据流程图;
图2为本发明实施例提供的消息获取数据流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而 不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做 出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅说明书附图1-2,本发明提供一种技术方案:一种动态储存方式的 嵌入式消息队列实现方法,所述实现方法包括以下步骤:
步骤I:消息推送;
步骤II:消息获取;
步骤III:服务内嵌。
进一步的,实现方法采用多线程进队push以及单线程出队pop操作,且 存在多个消息队列时,选定用当前第一消息队列,同时制定消息队列每个储 存子模块大小为32M,且依次增加储存模块数量。可以为消息分配优先级,以 确定要在队列中添加该消息的位置,从而确保优先级较高的消息位于队列前 端并得到优先处理。提供尽力顺序,确保消息大致按其发送的顺序进行传送, 且消息至少传送一次。允许在项目中同时使用其他消息队列机制,以适应不 同项目场景。
进一步的,实现方法采用多种数据储存方式:1、虚拟内存:允许通过使 用channel的map映射方法申请一个私有的虚拟内存空间,该空间是通过映 射磁盘得来的;2、共享内存:允许通过使用channel的map映射方法申请一 个可读可写的共享内存空间;3、磁盘:允许通过调用API(类似java)中的 Random Access File方法申请一个磁盘空间;4、内存:原则上数据已经在内 存中,服务会自动对消息进行空间分配,进行序列化处理。通过映射磁盘空 间使用虚拟内存,共享内存技术,内存储器以及本地磁盘四种方式的情况下, 使用户能根据自身计算机实际情况动态选择数据储存位置,充分利用计算机, 节省计算机资源。
channel的map映射是一种快速读写技术,它将通道所连接的数据节点中 的全部或部分数据直接映射到内存的一个Buffer中,而这个内存Buffer块 就是节点数据的映像,直接对这个Buffer进行修改会直接影响到节点数据, 而这个Buffer叫做Mapped Buffer,即镜像Buffer,对该Buffer进行修改 会直接影响到实际的节点。
其实际优点在内存映射机制来访问一个文件会比使用常规方法读写高效 得多,因为不需要做明确的系统调用,甚至比使用通道的效率都高。操作系 统的虚拟内存可以自动缓存内存页。这些页是用系统内存来缓存的,所以不 会消耗计算机内存堆资源。
进一步的,步骤I提出的消息推送包含以下步骤:步骤1、申请一个32M 储存子模块;步骤2、消息入队请求;步骤3、将所要入队的消息转换为二进 制数据byte,此时消息数据的大小为n以及长度为m;步骤4、判断数据有效 性,即n,m为大于0的正整数;若数据无效,则转回进行步骤2;若数据有 效,则继续进行;步骤5、将数据大小n转化为4字节数据,添加到该数据的 数据头,作为长度标识;步骤6、检查数据的长度是否超出所使用子模块储存空间的长度界限;若超出所使用储存空间长度界限,则进行步骤1;若未超出 所使用储存空间长度界限,则继续进行;步骤7、获取该内存的写偏移指针 pWrite;步骤8、判断数据是否可写;若不可写,则进行第二步;若可写,则 继续进行;步骤9、根据写偏移指针pWrite,以及数据长度m,确定数据在储 存空间中的写入位置;步骤10、写入数据,即写偏移指针pWrite向后移动数 据大小。推送是指系统在有可用消息时通知用户。可以使用长轮询让拉取等待指定的时间,以便新消息在完成之前到达。
进一步的,步骤6中判断数据的长度是否超出所使用子模块储存空间的 长度界限的方法为:在每次存入数据时,根据每条数据长度,累加计数参数 Store Length,且每次在存入数据时判断计数参数Store Length大小。
进一步的,步骤II提出的消息获取包含以下步骤:步骤11、判断系统状 态;如系统工作不正常,则在手动请求执行后,继续进行;若系统工作正常, 则继续进行;步骤12、从消息队列储存子模块中获取一条数据;;步骤13、 检查数据消费情况;判断数据消费情况;若数据已被消费,则执行步骤12; 若数据未被消费,则继续执行;步骤14、将数据转化为执行对象;根据获取 的二进制数据byte前四位字节,得到大小n;从内存中申请数据n大小的空间,为消息对象分配内存;将二进制数据byte转化为消息对象(如:String); 步骤15、通知用户。在不容许重复的情况下,通过自动筛选重复来确保每个 消息均精确地传输了一次(且只有一次)。能够支持为消息设置特定的传送时 间。如果需要为所有消息设置相同延迟,您可以设置一个延迟队列。可以存 储多个消息副本以实现冗余和高可用性,并在发生通信故障或错误的情况下 重新发送消息,以确保它们至少经过一次传送。
进一步的,步骤12中获取数据后,线程获取数据头前四字节(代表该条 数据大小n),且将数据大小n转化为浮点型对象,并且递减该子模块计数参 数Store Length;同时读偏移指针pRead向后移动数据长度,即指向下一条 数据。步骤13中检查数据消费情况是指:向数据状态参数data Read加入线 程安全锁;验证数据状态参数data Read。将对尝试访问队列的应用程序进行 身份验证,并允许使用加密来加密通过网络传输以及在队列中传输的消息。
进一步的,服务内嵌包含以下步骤:步骤16、将所有消息队列所包含的 功能点模块化,如消息推送、消息获取、数据同步等,整合为消息推送模块、 消息获取模块、数据同步模块等;步骤17、将所有模块化的功能点进行整合, 通过数据流向进行内联;步骤18、通过ide工具将服务进行打包,生成可兼 容所有操作系统的二次开发服务包,如jar、.so等;步骤19、在开发程序中 引入服务包,将嵌入式消息队列内嵌于开发程序中;步骤20、嵌入式消息队 列开始工作,服务会进行自动维护阶段,保证过程中的数据同步、以及高并 发处理、以及其他相应功能等。
本申请所提供的实施例中,应该理解到,所揭露的装置以及方法,也可 以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如, 附图中的流程图以及框图显示了根据本申请的多个实施例的装置、方法以及 计算机程序产品的可能实现的体系架构、功能以及操作。在这点上,流程图 或者框图中的每个方框可以代表一个模块、程序段或者代码的一部分,模块、 程序段或者代码的一部分包含一个或者多个用于实现规定的逻辑功能的可执 行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可 以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能 而定。也要注意的是,框图以及/或者流程图中的每个方框、以及框图以及/ 或者流程图中的方框的组合,可以用执行规定的功能或者动作的专用的基于 硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独 立的部分,也可以是各个模块单独存在,也可以两个或者两个以上模块集成 形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或者使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的 技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可 以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中, 包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者 网络设备等)执行本申请各个实施例方法的全部或者部分步骤。而前述的存 储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随 机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存 储程序代码的介质。需要说明的是,在本文中,诸如第一以及第二等之类的 关系术语仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而 不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺 序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性 的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那 些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、 方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包 括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或 者设备中还存在另外的相同要素。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本 领域的技术人员来说,本申请可以有各种更改以及变化。凡在本申请的精神 以及原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的 保护范围之内。应注意到:相似的标号以及字母在下面的附图中表示类似项, 因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行 进一步定义以及解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限 于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易 想到变化或者替换,都应涵盖在本申请的保护范围之内。因此,本申请的保 护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述实现方法包括以下步骤:
步骤I:消息推送;
步骤II:消息获取;
步骤III:服务内嵌。
2.根据权利要求1所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述实现方法采用多线程进队push以及单线程出队pop操作,且存在多个消息队列时,选定用当前第一消息队列,同时制定消息队列每个储存子模块大小为32M,且依次增加储存模块数量。
3.根据权利要求1所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述实现方法采用多种数据储存方式:
1、虚拟内存:允许通过使用channel的map映射方法申请一个私有的虚拟内存空间,该空间是通过映射磁盘得来的;
2、共享内存:允许通过使用channel的map映射方法申请一个可读可写的共享内存空间;
3、磁盘:允许通过调用API(类似java)中的Random Access File方法申请一个磁盘空间;
4、内存:原则上数据已经在内存中,服务会自动对消息进行空间分配,进行序列化处理。
4.根据权利要求1所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述步骤I提出的消息推送包含以下步骤:
步骤1、申请一个32M储存子模块;
步骤2、消息入队请求;
步骤3、将所要入队的消息转换为二进制数据byte,此时消息数据的大小为n以及长度为m;
步骤4、判断数据有效性,即n,m为大于0的正整数;
若数据无效,则转回进行步骤2;
若数据有效,则继续进行;
步骤5、将数据大小n转化为4字节数据,添加到该数据的数据头,作为长度标识;
步骤6、检查数据的长度是否超出所使用子模块储存空间的长度界限;
若超出所使用储存空间长度界限,则进行步骤1;
若未超出所使用储存空间长度界限,则继续进行;
步骤7、获取该内存的写偏移指针pWrite;
步骤8、判断数据是否可写;
若不可写,则进行第二步;
若可写,则继续进行;
步骤9、根据写偏移指针pWrite,以及数据长度m,确定数据在储存空间中的写入位置;
步骤10、写入数据,即写偏移指针pWrite向后移动数据大小。
5.根据权利要求4所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述步骤6中判断数据的长度是否超出所使用子模块储存空间的长度界限的方法为:在每次存入数据时,根据每条数据长度,累加计数参数Store Length,且每次在存入数据时判断计数参数Store Length大小。
6.根据权利要求1所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述步骤II提出的消息获取包含以下步骤:
步骤11、判断系统状态;
如系统工作不正常,则在手动请求执行后,继续进行;
若系统工作正常,则继续进行;
步骤12、从消息队列储存子模块中获取一条数据;;
步骤13、检查数据消费情况;
判断数据消费情况;
若数据已被消费,则执行步骤12;
若数据未被消费,则继续执行;
步骤14、将数据转化为执行对象;
根据获取的二进制数据byte前四位字节,得到大小n;
从内存中申请数据n大小的空间,为消息对象分配内存;
将二进制数据byte转化为消息对象(如:String);
步骤15、通知用户。
7.根据权利要求6所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述步骤12中获取数据后,线程获取数据头前四字节(代表该条数据大小n),且将数据大小n转化为浮点型对象,并且递减该子模块计数参数Store Length;
同时读偏移指针pRead向后移动数据长度,即指向下一条数据。
8.根据权利要求6所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述步骤13中检查数据消费情况是指:向数据状态参数data Read加入线程安全锁;验证数据状态参数data Read。
9.根据权利要求1所述的一种动态储存方式的嵌入式消息队列实现方法,其特征在于:所述服务内嵌包含以下步骤:
步骤16、将所有消息队列所包含的功能点模块化;
步骤17、将所有模块化的功能点进行整合,通过数据流向进行内联;
步骤18、通过ide工具将服务进行打包,生成可兼容所有操作系统的二次开发服务包;
步骤19、在开发程序中引入服务包,将嵌入式消息队列内嵌于开发程序中;
步骤20、嵌入式消息队列开始工作,服务会进行自动维护阶段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010441711.8A CN112148441A (zh) | 2020-07-28 | 2020-07-28 | 一种动态储存方式的嵌入式消息队列实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010441711.8A CN112148441A (zh) | 2020-07-28 | 2020-07-28 | 一种动态储存方式的嵌入式消息队列实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148441A true CN112148441A (zh) | 2020-12-29 |
Family
ID=73891411
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010441711.8A Pending CN112148441A (zh) | 2020-07-28 | 2020-07-28 | 一种动态储存方式的嵌入式消息队列实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148441A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626221A (zh) * | 2021-08-10 | 2021-11-09 | 迈普通信技术股份有限公司 | 一种消息入队方法及装置 |
CN117614906A (zh) * | 2024-01-23 | 2024-02-27 | 珠海星云智联科技有限公司 | 用于多线程多代表口发包的方法、计算机设备及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
CN105138410A (zh) * | 2015-08-31 | 2015-12-09 | 北京锐安科技有限公司 | 一种基于磁盘缓存的消息队列的实现方法及装置 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN107679931A (zh) * | 2017-08-17 | 2018-02-09 | 平安科技(深圳)有限公司 | 订单异步处理的方法、装置、存储介质及终端 |
CN109656779A (zh) * | 2018-12-07 | 2019-04-19 | 广州市百果园信息技术有限公司 | 内存监控方法、装置、终端和存储介质 |
CN110673833A (zh) * | 2019-09-23 | 2020-01-10 | 恩亿科(北京)数据科技有限公司 | 应用于程序化广告投放的信息管理系统及广告投放平台 |
-
2020
- 2020-07-28 CN CN202010441711.8A patent/CN112148441A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
CN105138410A (zh) * | 2015-08-31 | 2015-12-09 | 北京锐安科技有限公司 | 一种基于磁盘缓存的消息队列的实现方法及装置 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN107679931A (zh) * | 2017-08-17 | 2018-02-09 | 平安科技(深圳)有限公司 | 订单异步处理的方法、装置、存储介质及终端 |
CN109656779A (zh) * | 2018-12-07 | 2019-04-19 | 广州市百果园信息技术有限公司 | 内存监控方法、装置、终端和存储介质 |
CN110673833A (zh) * | 2019-09-23 | 2020-01-10 | 恩亿科(北京)数据科技有限公司 | 应用于程序化广告投放的信息管理系统及广告投放平台 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626221A (zh) * | 2021-08-10 | 2021-11-09 | 迈普通信技术股份有限公司 | 一种消息入队方法及装置 |
CN113626221B (zh) * | 2021-08-10 | 2024-03-15 | 迈普通信技术股份有限公司 | 一种消息入队方法及装置 |
CN117614906A (zh) * | 2024-01-23 | 2024-02-27 | 珠海星云智联科技有限公司 | 用于多线程多代表口发包的方法、计算机设备及介质 |
CN117614906B (zh) * | 2024-01-23 | 2024-04-19 | 珠海星云智联科技有限公司 | 用于多线程多代表口发包的方法、计算机设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7549151B2 (en) | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment | |
US20110078214A1 (en) | Managing message queues | |
CN103049317B (zh) | 云环境下基于队列的高并发数据快速写入系统及方法 | |
CN112148441A (zh) | 一种动态储存方式的嵌入式消息队列实现方法 | |
WO2016078259A1 (zh) | 一种基于嵌入式文件系统的流式数据读取方法 | |
CN110532109B (zh) | 一种共享多通道进程通信内存结构和方法 | |
CN109347757A (zh) | 消息拥塞控制方法、系统、设备及存储介质 | |
US20150304124A1 (en) | Message Processing Method and Device | |
TW201737085A (zh) | 應用程式介面死鎖監控方法和裝置 | |
CN112486913B (zh) | 一种基于集群环境下的日志异步存储方法和设备 | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN103986585A (zh) | 报文预处理方法及其装置 | |
CN111309700B (zh) | 一种面向多共享目录树的控制方法及系统 | |
CN112035255A (zh) | 线程池资源管理任务处理方法、装置、设备及存储介质 | |
CN113157467A (zh) | 一种多进程数据输出方法 | |
CN111949422B (zh) | 基于mq和异步io的数据多级缓存与高速传输记录方法 | |
CN111181874A (zh) | 一种报文处理方法、装置及存储介质 | |
WO2023160276A1 (zh) | 一种数据处理方法、装置、计算机设备以及可读存储介质 | |
CN111770054A (zh) | 一种针对smb协议读请求的交互加速方法与系统 | |
CN111435323B (zh) | 信息的传输方法、装置、终端、服务器及存储介质 | |
CN106357557A (zh) | 一种消息处理方法及装置 | |
CN112306827A (zh) | 日志采集装置、方法和计算机可读存储介质 | |
CN106997304B (zh) | 输入输出事件的处理方法及设备 | |
CN107911317B (zh) | 一种报文调度方法及装置 | |
CN114138371B (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 |