一种基于数据库的轻量级消息队列实现方法及存储设备技术

技术编号:20221693 阅读:43 留言:0更新日期:2019-01-28 20:13
本发明专利技术涉及消息处理技术领域,特别涉及一种基于数据库的轻量级消息队列实现方法及存储设备。所述一种基于数据库的轻量级消息队列实现方法,包括步骤:创建数据库表;接收请求操作,并根据请求操作更新消息表;启动本地消息监听程序,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;推送标注成功的消息至本地消费队列;启动本地消费线程,监听本地消费队列,若存在待消费的消息,则获取消息并进行消费;消费结束后,更新消息状态。本发明专利技术的技术方案采用基于数据库表的消息处理方式,整个消息的生产、消费过程无需使用MQ中间件作为媒介,降低了硬件环境、系统环境的各项配置要求,实现轻量级消息队列的功能。

【技术实现步骤摘要】
一种基于数据库的轻量级消息队列实现方法及存储设备
本专利技术涉及消息处理
,特别涉及一种基于数据库的轻量级消息队列实现方法及存储设备。
技术介绍
传统的消息消费模型依赖于MQ消息中间件进行实现:由生产者程序生产消息放入指定的队列中,再由消费者程序从指定队列中拉取消息进行消费,同时通过日志对消费的过程进行记录,后续基于日志进行相关的消息跟踪。这样的消费模型存在以下缺点:1、生产环境必须安装并配置对应的MQ中间件产品,对于软硬件环境、采购成本、兼容性等有更高的要求;2、MQ产品中的消息通常被暂存在内存中,如果队列应用出现宕机,消息将存在丢失风险;并且多数只能使用自带的管理页面浏览队列中的消息,只能满足普适性监控需求,无法直观展示消息的具体内容、关键数据项、处理状态等,不便于对消息的个性化监控;3、MQ产品中的消息在消费后即被销毁,对于消息的问题复现、异常追溯、消息重新消费等实现难度高;4、MQ产品中同一消息,难以被多种业务共同消费,并且对于复杂业务场景、业务功能的适配有较大难度。
技术实现思路
为此,需要提供一种基于数据库的轻量级消息队列实现方法,用以解决上述提到的现有消费模型中存在的问题。具体技术方案如下:一种基于数据库的轻量级消息队列实现方法,包括步骤:创建数据库表,所述数据库表至少包括:消息表;接收请求操作,并根据所述请求操作对应更新所述消息表;启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;推送标注成功的消息至本地消费队列;启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费;消费结束后,更新消息状态。进一步的,所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:根据所述请求操作生产消息,并将所述消息写入所述消息表。进一步的,还包括步骤:启动消息归档线程,并扫描过期消息,对过期消息进行归档。进一步的,还包括步骤:启动死信修复线程,扫描符合预设死信条件的消息,根据预定义策略对符合预设死信条件的消息进行修复。进一步的,所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;所述数据库表还包括:复杂消息体表,所述复杂消息体表用于:存储复杂、数据量大的业务消息。为解决上述技术问题,还提供了一种存储设备,具体技术方案如下:一种存储设备,其中存储有指令集,所述指令集用于执行:创建数据库表,所述数据库表至少包括:消息表;接收请求操作,并根据所述请求操作对应更新所述消息表;启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;推送标注成功的消息至本地消费队列;启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费;消费结束后,更新消息状态。进一步的,所述指令集还用于执行:所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:根据所述请求操作生产消息,并将所述消息写入所述消息表。进一步的,所述指令集还用于执行:启动消息归档线程,并扫描过期消息,对过期消息进行归档。进一步的,所述指令集还用于执行:启动死信修复线程,扫描符合预设死信条件的消息,根据预定义策略对符合预设死信条件的消息进行修复。进一步的,所述指令集还用于执行:所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;所述数据库表还包括:复杂消息体表,所述复杂消息体表用于:存储复杂、数据量大的业务消息。本专利技术的有益效果是:1、本专利技术的技术方案采用基于数据库表的消息处理方式,整个消息的生产、消费过程无需使用MQ中间件作为媒介,降低了硬件环境、系统环境的各项配置要求,实现轻量级消息队列的功能;2、其次消息利用数据库进行存储,解决了消息存放在内存中,因宕机造成的丢失风险,并且基于数据库,可开发各类的管理页面,对消息进行查询、管理、统计,大大降低了监控难度;3、由于消息持久化在数据库,消费后不立即销毁,并记录异常堆栈等日志消息。消息的追溯、统计监控依赖于数据库的查询功能。查询指定过滤条件的消息即可追溯消息消费过程中存在的各类异常,同时通过消息编号,更改指定消息的状态,变更状态即可进行消息的重新消费和问题复现。相比于MQ需要进行发送方重新请求,该方法极大的降低了消息追溯难度。附图说明图1为具体实施方式所述一种基于数据库的轻量级消息队列实现方法的流程图;图2为具体实施方式所述消息表、复杂消息体表示意图;图3为具体实施方式所述一种存储设备的示意图。附图标记说明:300、存储设备。具体实施方式为详细说明技术方案的
技术实现思路
、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。请参阅图1至图2,在本实施方式中,一种基于数据库的轻量级消息队列实现方法可应用在一种存储设备上,所述存储设备,包括但不限于:个人计算机、服务器、通用计算机、专用计算机、网络设备、嵌入式设备、可编程设备、智能移动终端等。具体实现如下:步骤S101:创建数据库表,所述数据库表至少包括:消息表。步骤S102:接收请求操作,并根据所述请求操作对应更新所述消息表。步骤S103:启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注。步骤S104:推送标注成功的消息至本地消费队列。步骤S105:启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费。步骤S106:消费结束后,更新消息状态。以上步骤具体可采用如下方式:步骤S101:创建数据库表,其核心表为消息表,在本实施方式中,亦创建有另外一个表复杂消息体表,其中所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;所述复杂消息体表用于:存储复杂、数据量大的业务消息。消息表是必须的,复杂消息体表可根据实际业务的复杂程度可选择性地决定是否创建。如图2所示,表的内容可如下所示:创建好数据库表后,执行步骤S102,在本实施方式中,所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:根据所述请求操作生产消息,并将所述消息写入所述消息表。具体可采用如下方式:接收外部调用请求,请求形式不限;支持http请求、WebService请求、RMI调用、类方法调用等;将外部的请求转换为对应的消息对象,并将消息对象写入数据库;初次写入时,此时消息的状态为:0:待消费;通过该步骤可扩展出主题订阅、广播通知等更多功能,在生产消息的时候,根据消息头信息上的控制字段,在指定表上生成对应的消息即可。如某应用APP1内,用户B/用户C订阅了用户A的消息;在生产A的消息时,获取订阅关系(关系可存储置数据库表、或者缓存系统中),创建订阅消息,并将消息的目标编号,指向订阅者B/订阅者C,就可生产订阅者的消息。在本实施方式中,在执行步骤S103前,先创建应用本地的消费队列,用于存放本地待消费的消息,同时启动本地的消息监听线程,定时轮询扫描消息表。将扫描到的消息,进行逐一遍历,判断是否监听到未处理的消息,若监听到存在未处理的消息,则利用sql语句方式标本文档来自技高网
...

【技术保护点】
1.一种基于数据库的轻量级消息队列实现方法,其特征在于,包括步骤:创建数据库表,所述数据库表至少包括:消息表;接收请求操作,并根据所述请求操作对应更新所述消息表;启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;推送标注成功的消息至本地消费队列;启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费;消费结束后,更新消息状态。

【技术特征摘要】
1.一种基于数据库的轻量级消息队列实现方法,其特征在于,包括步骤:创建数据库表,所述数据库表至少包括:消息表;接收请求操作,并根据所述请求操作对应更新所述消息表;启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;推送标注成功的消息至本地消费队列;启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费;消费结束后,更新消息状态。2.根据权利要求1所述的一种基于数据库的轻量级消息队列实现方法,其特征在于,所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:根据所述请求操作生产消息,并将所述消息写入所述消息表。3.根据权利要求1所述的一种基于数据库的轻量级消息队列实现方法,其特征在于,还包括步骤:启动消息归档线程,并扫描过期消息,对过期消息进行归档。4.根据权利要求1所述的一种基于数据库的轻量级消息队列实现方法,其特征在于,还包括步骤:启动死信修复线程,扫描符合预设死信条件的消息,根据预定义策略对符合预设死信条件的消息进行修复。5.根据权利要求1所述的一种基于数据库的轻量级消息队列实现方法,其特征在于,所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;所述数据库表还包括:复杂消息体表,所述复杂消息体表用于:存储复杂、数...

【专利技术属性】
技术研发人员:陈哲鲁维逸许惠亮姚少扬
申请(专利权)人:福建榕基软件股份有限公司
类型:发明
国别省市:福建,35

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

1