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

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

Info

Publication number
CN109271417B
CN109271417B CN201811407005.0A CN201811407005A CN109271417B CN 109271417 B CN109271417 B CN 109271417B CN 201811407005 A CN201811407005 A CN 201811407005A CN 109271417 B CN109271417 B CN 109271417B
Authority
CN
China
Prior art keywords
message
messages
database
consumption
queue
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
Application number
CN201811407005.0A
Other languages
English (en)
Other versions
CN109271417A (zh
Inventor
陈哲
鲁维逸
许惠亮
姚少扬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
FUJIAN RONGJI SOFTWARE CO LTD
Original Assignee
FUJIAN RONGJI SOFTWARE CO LTD
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by FUJIAN RONGJI SOFTWARE CO LTD filed Critical FUJIAN RONGJI SOFTWARE CO LTD
Priority to CN201811407005.0A priority Critical patent/CN109271417B/zh
Publication of CN109271417A publication Critical patent/CN109271417A/zh
Application granted granted Critical
Publication of CN109271417B publication Critical patent/CN109271417B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

一种基于数据库的轻量级消息队列实现方法及存储设备
技术领域
本发明涉及消息处理技术领域,特别涉及一种基于数据库的轻量级消息队列实现方法及存储设备。
背景技术
传统的消息消费模型依赖于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所示,表的内容可如下所示:
Figure BDA0001877612160000051
Figure BDA0001877612160000061
创建好数据库表后,执行步骤S102,在本实施方式中,所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:根据所述请求操作生产消息,并将所述消息写入所述消息表。具体可采用如下方式:
接收外部调用请求,请求形式不限;支持http请求、WebService请求、RMI调用、类方法调用等;
将外部的请求转换为对应的消息对象,并将消息对象写入数据库;初次写入时,此时消息的状态为:0:待消费;
通过该步骤可扩展出主题订阅、广播通知等更多功能,在生产消息的时候,根据消息头信息上的控制字段,在指定表上生成对应的消息即可。如某应用APP1内,用户B/用户C订阅了用户A的消息;在生产A的消息时,获取订阅关系(关系可存储置数据库表、或者缓存***中),创建订阅消息,并将消息的目标编号,指向订阅者B/订阅者C,就可生产订阅者的消息。
在本实施方式中,在执行步骤S103前,先创建应用本地的消费队列,用于存放本地待消费的消息,同时启动本地的消息监听线程,定时轮询扫描消息表。
将扫描到的消息,进行逐一遍历,判断是否监听到未处理的消息,若监听到存在未处理的消息,则利用sql语句方式标注消费占用,以防止其他线程应用重复消费:
核心语句:Update T_MSG t Set t.status=‘1’Where t.status=’0’And t.id=‘xxx’;
执行该语句后,从程序端获取执行影响的条数,如果非0,说明已成功标注该消息;为0时,说明该消息已被其他线程或节点标注,直接略过。
步骤S104:
将标注成功的消息推送本地的消费队列,此时消息状态为1:消费中,等待消费者线程消费。
步骤S105:
启动本地的消费线程,监听本地的消费队列;监听到本地队列中存在待消费的消息时,获取并进行消费。
步骤S106:
消费结束后,无论成功、失败,都更新消息的状态;记录相关信息。其中,如果消费成功,状态变更为2:成功,记录日志;如果为失败,变更为3:失败。同时记录异常类型、日志。
同样通过以上步骤如果业务需求允许进行自动重试功能,此时可根据异常分类划分,将指定的消息状态变更为0:待消费。并在可执行时间上进行设置下次重试的开始时间,程序后续即可自动重试。
进一步的,上述所有的线程均支持多线程调用,可开启多线程模式,以提高***的处理性能。
进一步的,在其它实施方式中,还可运行其它辅助流程用以管理消息在消费之外的环节。如:
启动消息归档线程,并扫描过期消息,对过期消息进行归档。具体可采用如下方式:
扫描过期消息,扫描可依赖定时任务组件的功能,进行定期/定时扫描,过期策略通常可根据实际存储、业务需求进行调整,例如15天、1个月等。
将过期的消息进行归档。归档的消息主体,除了消息外,还包括复杂的Blob形式的消息,由于在每个表中都定义了记录的创建时间,在归档时无需逐一进行主子记录的查询,直接按照创建时间进行归档即可,大幅提高了归档的效率。
归档的策略可根据实际业务需求自定义,例如移除、转移、或者直接利用数据库的分区表保存均可。
还可启动死信修复线程,扫描符合预设死信条件的消息,根据预定义策略对符合预设死信条件的消息进行修复。具体可采用如下方式:
首先对死消息的定义做以下说明:死信消息定义:对于那些消费过程中因各类突出情况产生异常过程、导致无法被正确消费的消息,例如某一消息刚被标注为占用状态,而此时应用关闭,导致其未被进行消费;又或者某一消息因为网络、IO等原因导致消费失败。具体步骤如下:
扫描符合死信消息定义的消息,死信消息的定义可根据业务需求进行扩展和调整,包括因为网络等原因消费失败的消息均可被列为死信消息。
针对死信消息,可根据自定义策略进行修复,例如上述提到:
被占用却未被消费的消息,可修复状态为0,让消费程序重新消费;
因网络等问题,消费异常的消息,可制定重试策略,重置消息的状态,进行重新消费尝试。
在其它实施方式中,一实施例如下:
使用上述实现方式,实现业务报文的转发功能
消息表设计如上,该实施例由于存在具体的业务报文,业务报文大小>4000字符长度,<1MB;故使用复杂消息体表;
接收外部请求,根据消息中的头信息,持久为数据库中消息,主要字段摘要:
Figure BDA0001877612160000081
Figure BDA0001877612160000091
创建本地消费队列,启动线程,轮询监听待消费的消息,
以下为待处理消息轮询线程的代码片段:
Figure BDA0001877612160000092
将扫描到的消息,进行逐一遍历,并利用sql语句方式标注消费占用,以防止其他线程应用重复消费,代码片段:
Figure BDA0001877612160000093
其中,service.checkUndoTaskIndex4Cluster的核心语句:
Update T_MSG t Set t.status=‘1’Where t.status=’0’And t.id=‘xxx’;执行该语句,并返回受影响的记录条数,如果返回的为0,则表明当前消息已经被其他应用所标注,放弃处理;如果返回值=1,则表明,当前应用已成功标注了该消息的处理。此时消息的状态为1:正在处理中,同时将标注要处理的消息推送至本地的消费队列中,等待处理。
启动消费线程,监听本地消费队列,存在待消息的消息时,进行处理。
以下为消费者线程的代码片段:
Figure BDA0001877612160000101
在其它实施方式中,当需要手动重消费时(开发调试、异常复现、批量重试),只需执行update语句,变更消息的状态即可。
语句片段:Update T_MSG t Set t.stauts=‘0’Where t.status=‘3’[And其他过滤条件…];
当需要开启自动重消费时,可选择:
1、在消费后,将消息的状态更改为0,并设置下次重试时间,累加重试次数,即可自动实现定期的消费重试。建议设定重试的上限次数和合理的重试间隔,以便于及时中断某些消息的处理,节省***开支。
2、利用死信消息修复线程,对于指定状态、指定异常类型的消息,自动进行状态重置,即可完成重新消费。
1、本发明的技术方案采用基于数据库表的消息处理方式,整个消息的生产、消费过程无需使用MQ中间件作为媒介,降低了硬件环境、***环境的各项配置要求,实现轻量级消息队列的功能;
2、其次消息利用数据库进行存储,解决了消息存放在内存中,因宕机造成的丢失风险,并且基于数据库,可开发各类的管理页面,对消息进行查询、管理、统计,大大降低了监控难度;
3、由于消息持久化在数据库,消费后不立即销毁,并记录异常堆栈等日志消息。消息的追溯、统计监控依赖于数据库的查询功能。查询指定过滤条件的消息即可追溯消息消费过程中存在的各类异常,同时通过消息编号,更改指定消息的状态,变更状态即可进行消息的重新消费和问题复现。相比于MQ需要进行发送方重新请求,该方法极大的降低了消息追溯难度。
请参阅图3,在本实施方式中,一种存储设备300的具体实施方式如下:
一种存储设备300,其中存储有指令集,所述指令集用于执行:
创建数据库表,所述数据库表至少包括:消息表;
接收请求操作,并根据所述请求操作对应更新所述消息表;
启动本地消息监听程序,判断是否监听到未处理的消息,若监听到存在未处理的消息,则对对应的未处理的消息在数据库中写入消费占用标注;
推送标注成功的消息至本地消费队列;
启动本地消费线程,监听本地消费队列,判断是否监听到存在待消费的消息,若存在待消费的消息,则获取所述消息并进行消费;
消费结束后,更新消息状态。具体可采用如下方式:
创建数据库表,其核心表为消息表,在本实施方式中,亦创建有另外一个表复杂消息体表,其中所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;所述复杂消息体表用于:存储复杂、数据量大的业务消息。消息表是必须的,复杂消息体表可根据实际业务的复杂程度可选择性地决定是否创建。如图2所示,表的内容可如下所示:
Figure BDA0001877612160000121
Figure BDA0001877612160000122
Figure BDA0001877612160000131
创建好数据库表后,进一步的,所述指令集还用于执行:
所述“并根据所述请求操作对应更新所述消息表”,还包括步骤:
根据所述请求操作生产消息,并将所述消息写入所述消息表。具体可采用如下方式:
接收外部调用请求,请求形式不限;支持http请求、WebService请求、RMI调用、类方法调用等;
将外部的请求转换为对应的消息对象,并将消息对象写入数据库;初次写入时,此时消息的状态为:0:待消费;
通过该步骤可扩展出主题订阅、广播通知等更多功能,在生产消息的时候,根据消息头信息上的控制字段,在指定表上生成对应的消息即可。如某应用APP1内,用户B/用户C订阅了用户A的消息;在生产A的消息时,获取订阅关系(关系可存储置数据库表、或者缓存***中),创建订阅消息,并将消息的目标编号,指向订阅者B/订阅者C,就可生产订阅者的消息。
在本实施方式中,在启动本地消息监听程序前,先创建应用本地的消费队列,用于存放本地待消费的消息,同时启动本地的消息监听线程,定时轮询扫描消息表。
将扫描到的消息,进行逐一遍历,判断是否监听到未处理的消息,若监听到存在未处理的消息,则利用sql语句方式标注消费占用,以防止其他线程应用重复消费:
核心语句:Update T_MSG t Set t.status=‘1’Where t.status=’0’And t.id=‘xxx’;
执行该语句后,从程序端获取执行影响的条数,如果非0,说明已成功标注该消息;为0时,说明该消息已被其他线程或节点标注,直接略过。
将标注成功的消息推送本地的消费队列,此时消息状态为1:消费中,等待消费者线程消费。
启动本地的消费线程,监听本地的消费队列;监听到本地队列中存在待消费的消息时,获取并进行消费。
消费结束后,无论成功、失败,都更新消息的状态;记录相关信息。其中,如果消费成功,状态变更为2:成功,记录日志;如果为失败,变更为3:失败。同时记录异常类型、日志。
同样通过以上步骤如果业务需求允许进行自动重试功能,此时可根据异常分类划分,将指定的消息状态变更为0:待消费。并在可执行时间上进行设置下次重试的开始时间,程序后续即可自动重试。
进一步的,上述所有的线程均支持多线程调用,可开启多线程模式,以提高***的处理性能。
进一步的,所述指令集还用于执行:
启动消息归档线程,并扫描过期消息,对过期消息进行归档。具体可采用如下方式:
扫描过期消息,扫描可依赖定时任务组件的功能,进行定期/定时扫描,过期策略通常可根据实际存储、业务需求进行调整,例如15天、1个月等。
将过期的消息进行归档。归档的消息主体,除了消息外,还包括复杂的Blob形式的消息,由于在每个表中都定义了记录的创建时间,在归档时无需逐一进行主子记录的查询,直接按照创建时间进行归档即可,大幅提高了归档的效率。
归档的策略可根据实际业务需求自定义,例如移除、转移、或者直接利用数据库的分区表保存均可。
进一步的,所述指令集还用于执行:
启动死信修复线程,扫描符合预设死信条件的消息,根据预定义策略对符合预设死信条件的消息进行修复。具体可采用如下方式:
首先对死消息的定义做以下说明:死信消息定义:对于那些消费过程中因各类突出情况产生异常过程、导致无法被正确消费的消息,例如某一消息刚被标注为占用状态,而此时应用关闭,导致其未被进行消费;又或者某一消息因为网络、IO等原因导致消费失败。具体步骤如下:
扫描符合死信消息定义的消息,死信消息的定义可根据业务需求进行扩展和调整,包括因为网络等原因消费失败的消息均可被列为死信消息。
针对死信消息,可根据自定义策略进行修复,例如上述提到:
被占用却未被消费的消息,可修复状态为0,让消费程序重新消费;
因网络等问题,消费异常的消息,可制定重试策略,重置消息的状态,进行重新消费尝试。
进一步的,所述指令集还用于执行:
所述消息表用于:存储外部程序产生的消息、并记录消息的核心控制字段;
所述数据库表还包括:复杂消息体表,所述复杂消息体表用于:存储复杂、数据量大的业务消息。
在其它实施方式中,一实施例如下:
使用上述实现方式,实现业务报文的转发功能
消息表设计如上,该实施例由于存在具体的业务报文,业务报文大小>4000字符长度,<1MB;故使用复杂消息体表;
接收外部请求,根据消息中的头信息,持久为数据库中消息,主要字段摘要:
Figure BDA0001877612160000151
Figure BDA0001877612160000161
创建本地消费队列,启动线程,轮询监听待消费的消息,
以下为待处理消息轮询线程的代码片段:
Figure BDA0001877612160000162
将扫描到的消息,进行逐一遍历,并利用sql语句方式标注消费占用,以防止其他线程应用重复消费,代码片段:
Figure BDA0001877612160000163
其中,service.checkUndoTaskIndex4Cluster的核心语句:
Update T_MSG t Set t.status=‘1’Where t.status=’0’And t.id=‘xxx’;执行该语句,并返回受影响的记录条数,如果返回的为0,则表明当前消息已经被其他应用所标注,放弃处理;如果返回值=1,则表明,当前应用已成功标注了该消息的处理。此时消息的状态为1:正在处理中,同时将标注要处理的消息推送至本地的消费队列中,等待处理。
启动消费线程,监听本地消费队列,存在待消息的消息时,进行处理。
以下为消费者线程的代码片段:
Figure BDA0001877612160000171
在其它实施方式中,当需要手动重消费时(开发调试、异常复现、批量重试),只需执行update语句,变更消息的状态即可。
语句片段:Update T_MSG t Set t.stauts=‘0’Where t.status=‘3’[And其他过滤条件…];
当需要开启自动重消费时,可选择:
1、在消费后,将消息的状态更改为0,并设置下次重试时间,累加重试次数,即可自动实现定期的消费重试。建议设定重试的上限次数和合理的重试间隔,以便于及时中断某些消息的处理,节省***开支。
2、利用死信消息修复线程,对于指定状态、指定异常类型的消息,自动进行状态重置,即可完成重新消费。
1、本发明的技术方案采用基于数据库表的消息处理方式,整个消息的生产、消费过程无需使用MQ中间件作为媒介,降低了硬件环境、***环境的各项配置要求,实现轻量级消息队列的功能;
2、其次消息利用数据库进行存储,解决了消息存放在内存中,因宕机造成的丢失风险,并且基于数据库,可开发各类的管理页面,对消息进行查询、管理、统计,大大降低了监控难度;
3、由于消息持久化在数据库,消费后不立即销毁,并记录异常堆栈等日志消息。消息的追溯、统计监控依赖于数据库的查询功能。查询指定过滤条件的消息即可追溯消息消费过程中存在的各类异常,同时通过消息编号,更改指定消息的状态,变更状态即可进行消息的重新消费和问题复现。相比于MQ需要进行发送方重新请求,该方法极大的降低了消息追溯难度。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。

Claims (10)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811407005.0A CN109271417B (zh) 2018-11-23 2018-11-23 一种基于数据库的轻量级消息队列实现方法及存储设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811407005.0A CN109271417B (zh) 2018-11-23 2018-11-23 一种基于数据库的轻量级消息队列实现方法及存储设备

Publications (2)

Publication Number Publication Date
CN109271417A CN109271417A (zh) 2019-01-25
CN109271417B true CN109271417B (zh) 2022-04-22

Family

ID=65191382

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811407005.0A Active CN109271417B (zh) 2018-11-23 2018-11-23 一种基于数据库的轻量级消息队列实现方法及存储设备

Country Status (1)

Country Link
CN (1) CN109271417B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110505315A (zh) * 2019-09-27 2019-11-26 北京锐安科技有限公司 数据处理方法、装置、设备及存储介质
CN111158934B (zh) * 2019-12-31 2023-05-02 中国银行股份有限公司 基于缓冲队列接收数据实现不同级别延迟拼接方法和装置
CN111367628B (zh) * 2020-03-05 2023-05-23 中国银行股份有限公司 分布式事务的处理方法、装置及消息生产方、消费方***
CN111459686B (zh) * 2020-03-17 2023-06-27 华云数据控股集团有限公司 队列消息存储转发方法、***及具操作***的计算机装置
CN111949497B (zh) * 2020-06-23 2024-04-12 贝壳技术有限公司 消息队列***以及基于消息队列***的消息处理方法
CN112104731B (zh) * 2020-09-11 2022-05-20 北京奇艺世纪科技有限公司 请求处理方法、装置、电子设备和存储介质
CN112363946B (zh) * 2020-11-24 2024-04-16 上海万物新生环保科技集团有限公司 一种基于业务***的消息转发方法及设备
CN112463407A (zh) * 2020-11-25 2021-03-09 北京神州数字科技有限公司 一种消息传输及消费方法
CN112559217A (zh) * 2020-12-22 2021-03-26 鲁班(北京)电子商务科技有限公司 一种消息可靠性消费幂等处理方法及处理装置
CN113014618B (zh) * 2021-01-12 2022-04-29 腾讯科技(深圳)有限公司 消息处理方法、***和电子设备
CN115412208A (zh) * 2022-08-09 2022-11-29 唯阜德(武汉)科技有限公司 一种用于消息队列管理***的消息传送方法及***
CN116401117B (zh) * 2023-03-09 2024-04-09 北京海致星图科技有限公司 一种流计算***和传统软件应用***结合的数据处理方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103064731A (zh) * 2012-12-26 2013-04-24 人民搜索网络股份公司 一种提高消息队列***性能的装置及其方法
CN106789335A (zh) * 2017-01-13 2017-05-31 泰康保险集团股份有限公司 一种用于处理信息的方法和***
CN108270668A (zh) * 2018-01-31 2018-07-10 北京工业大学 一种基于消息队列的iSIGHT模型文件管理***
CN108536544A (zh) * 2018-03-21 2018-09-14 微梦创科网络科技(中国)有限公司 基于数据库消息队列的消费方法、装置、服务器和介质
CN108768826A (zh) * 2018-05-16 2018-11-06 华南理工大学 基于MQTT和Kafka高并发场景下的消息路由方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000076114A (ja) * 1998-09-01 2000-03-14 Hitachi Ltd トランザクショナルなメッセージ処理方法
KR20020057190A (ko) * 2000-12-30 2002-07-11 박종섭 이동통신 지능망 시스템에서 서비스 데이터 처리 방법
JP4406310B2 (ja) * 2004-03-30 2010-01-27 株式会社野村総合研究所 Mqデータ同期システム及びmqデータ同期プログラム
CN105577808A (zh) * 2015-12-29 2016-05-11 中国建设银行股份有限公司 监管报送方法和***
CN106776072A (zh) * 2016-12-16 2017-05-31 携程旅游信息技术(上海)有限公司 消息推送方法及***
CN107423142A (zh) * 2017-06-28 2017-12-01 北京明朝万达科技股份有限公司 一种基于发布、订阅模式的数据库消息通知方法及***

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103064731A (zh) * 2012-12-26 2013-04-24 人民搜索网络股份公司 一种提高消息队列***性能的装置及其方法
CN106789335A (zh) * 2017-01-13 2017-05-31 泰康保险集团股份有限公司 一种用于处理信息的方法和***
CN108270668A (zh) * 2018-01-31 2018-07-10 北京工业大学 一种基于消息队列的iSIGHT模型文件管理***
CN108536544A (zh) * 2018-03-21 2018-09-14 微梦创科网络科技(中国)有限公司 基于数据库消息队列的消费方法、装置、服务器和介质
CN108768826A (zh) * 2018-05-16 2018-11-06 华南理工大学 基于MQTT和Kafka高并发场景下的消息路由方法

Also Published As

Publication number Publication date
CN109271417A (zh) 2019-01-25

Similar Documents

Publication Publication Date Title
CN109271417B (zh) 一种基于数据库的轻量级消息队列实现方法及存储设备
US20230209330A1 (en) Service Registration in a Communications Network
CN106059825A (zh) 一种分布式***及配置方法
CN103631868B (zh) 一种兼容关系数据库的数据管理***
CN103780679A (zh) 基于http协议的长延时远程调用方法
CN111930706B (zh) 基于远程调用的分布式网络文件存储***和方法
CN107065813A (zh) 一种车间设备数据监控***及方法
JPH08263309A (ja) ソフトウェア・アプリケーション・プログラム・オブジェクト間のイベント通知方法及び装置
CN108984290A (zh) 任务调度方法和***
US8301750B2 (en) Apparatus, system, and method for facilitating communication between an enterprise information system and a client
CN100512140C (zh) 一种远程设备配置参数集的配置控制方法及装置
US8510426B2 (en) Communication and coordination between web services in a cloud-based computing environment
CN111783102B (zh) 一种安全驱逐Kubernetes集群中节点的方法和存储设备
US20200236165A1 (en) System and method for synchronization of media objects between devices operating in a multiroom system
CN107800780B (zh) 数据服务方法、装置、存储介质和计算机设备
CN113934711B (zh) 一种自动化部署gbase8s集群的方法
CN114020368A (zh) 基于状态机的信息处理方法、装置和存储介质
CN115328490A (zh) Devops平台流水线异步带参反馈方法及控制***
CN113239061B (zh) 智慧法院数据更新方法及***
CN114553861B (zh) 文件传输方法及装置、存储介质和电子设备
CN115866017B (zh) 消息处理方法、装置、通信设备及存储介质
CN112799781B (zh) 一种基于对象存储协议的块存储池访问方法
CN112019452B (zh) 一种业务需求的处理方法、***及相关装置
CN117149711A (zh) 一种分布式***大文件异步生成和下载方法、***及设备
US20050022195A1 (en) Modified auto remote agent for job scheduling and management applications

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
GR01 Patent grant
GR01 Patent grant