CN115242744B - 自定义时间的定时消息发送方法、系统、终端及存储介质 - Google Patents
自定义时间的定时消息发送方法、系统、终端及存储介质 Download PDFInfo
- Publication number
- CN115242744B CN115242744B CN202210671656.0A CN202210671656A CN115242744B CN 115242744 B CN115242744 B CN 115242744B CN 202210671656 A CN202210671656 A CN 202210671656A CN 115242744 B CN115242744 B CN 115242744B
- Authority
- CN
- China
- Prior art keywords
- message
- timing
- timing message
- log file
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000012545 processing Methods 0.000 claims abstract description 52
- 238000004519 manufacturing process Methods 0.000 claims abstract description 16
- 238000012546 transfer Methods 0.000 claims description 21
- 238000011084 recovery Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 230000009191 jumping Effects 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 claims description 3
- 238000004891 communication Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种自定义时间的定时消息发送方法、系统、终端及存储介质,其属于消息处理的技术领域,其中方案包括:获取生产端发送的消息,并判断消息类型;若消息类型为定时消息,对定时消息进行定时消息隐藏处理,将定时消息隐藏处理得到的定时消息存储至实际消息存储的日志文件内,并生成定时消息索引;提前n秒将定时消息索引加载到时间轮内;到达消息投递时间时,获取时间轮中该消息投递时间对应的定时消息索引,并对定时消息索引进行定时消息读取处理;将定时消息读取处理得到的定时消息写入实际消息存储的日志文件内。本申请具有无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景的效果。
Description
技术领域
本发明涉及消息处理的技术领域,尤其是涉及一种自定义时间的定时消息发送方法、系统、终端及存储介质。
背景技术
市场上大部分手机软件的消息推送系统都支持定时消息推送功能,例如想在国庆假期给用户推送一些优惠活动的消息,那么需要在国庆假期前生成定时消息,设置该定时消息的推送时间后,将该定时消息发送给消息推送系统。
目前多数消息推送系统不支持发送定时消息,仅有支持的也会提前在服务端预设定时消息发送的固定级别,消息推送系统会根据预设的固定级别发送定时消息。比如预设了5秒和10秒的固定级别,即用户只能发送5秒延迟或者10秒延迟的消息,不能发送12秒延迟的消息。
在实现本申请的过程中,发明人发现上述技术至少存在以下问题:在OTA(OnlineTravel Agency)领域,用户购买高铁票后一般会在发车前半小时接收到发车提醒,由于用户下单购票的时间不固定,因此通过预设固定级别的方式发送定时消息很难满足用户的需求。
发明内容
为了解决由于用户下单购票的时间不固定,因此通过预设固定级别的方式发送定时消息很难满足用户的需求的问题,本申请提供一种自定义时间的定时消息发送方法、系统、终端及存储介质。
第一方面,本申请提供一种自定义时间的定时消息发送方法,采用如下的技术方案;
一种自定义时间的定时消息发送方法,包括以下步骤:
获取生产端发送的消息,并根据消息属性判断消息类型;
若消息类型为定时消息,对定时消息进行定时消息隐藏处理,将定时消息隐藏处理得到的定时消息存储至实际消息存储的日志文件内,并生成定时消息索引,所述定时消息包括定时消息内容和消息投递时间;
以预设时间段为基准提前n秒将消息投递时间在预设时间段内的定时消息对应的定时消息索引加载到时间轮内;
到达消息投递时间时,获取时间轮中该消息投递时间对应的定时消息索引,并对定时消息索引进行定时消息读取处理;
将定时消息读取处理得到的定时消息写入实际消息存储的日志文件内。
通过采用上述技术方案,对定时消息进行定时消息隐藏处理,将定时消息存储到实际消息存储的日志文件内,使得消费端在实际消息存储的日志文件中暂时无法根据需求消费该定时消息,在定时消息的消息投递时间即将到达时,再通过对定时消息索引进行定时消息读取处理,使得消费端能够在实际消息存储的日志文件中根据需求消费该定时消息,本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
在一个具体的可实施方案中,所述以预设时间段为基准提前n秒将消息投递时间在预设时间段内的定时消息的定时消息索引加载到时间轮内之前包括:
将预设时间段分为若干个时间长度相等的分类时间子段,并对预设时间段内所有定时消息索引按照定时消息所属的消息投递时间进行分类;
将属于同一分类时间子段的定时消息索引添加到同一个索引文件内,所述索引文件的内容包括定时消息在实际消息存储的日志文件的物理偏移量、消息大小和消息投递时间。
通过采用上述技术方案,根据消息投递时间对定时消息索引进行分类,将同一时间段的定时消息索引存储到同一个索引文件内,针对不同的时间段,时间轮获取不同的索引文件,减少了内存的存储压力,提高了处理的速度。
在一个具体的可实施方案中,所述定时消息隐藏和定时消息读取分别包括以下步骤:
所述定时消息隐藏的步骤为:根据获取的定时消息,将定时消息的真实消息主题改为定时消息的专用消息主题,将所述定时消息的真实消息主题名以消息属性的方式存储在定时消息内,将所述定时消息的消息投递时间隐藏在定时消息的消息标签内;
所述定时消息读取的步骤为:根据定时消息在实际消息存储的日志文件的物理偏移量和消息大小,从实际消息存储的日志文件里取出定时消息,将定时消息的专用消息主题改回定时消息的真实消息主题。
通过采用上述技术方案,通过更改定时消息的真实消息主题,以定时消息的专用消息主题进行命名,由于消息主题名改了,消费端暂时消费不到这条消息,从而便于根据定时消息的专用消息主题对定时消息进行分类,将定时消息的专用消息主题改为定时消息的真实消息主题,以便于消费端能够消费到这条消息,从而对定时消息的内容进行获取,便于完成定时消息的投递。
在一个具体的可实施方案中,所述方法还包括针对定时消息的定时消息回放的步骤:
所述实际消息存储的日志文件到期时需要将该日志文件删除,若所需删除的实际消息存储的日志文件内存在未投递的定时消息,则需要先将未投递的定时消息添加到最新的实际消息存储的日志文件中,再将所需删除的实际消息存储的日志文件删除。
通过采用上述技术方案,删除到期的实际消息存储的日志文件,释放磁盘容量,将未投递的定时消息提取出来,可以减少定时消息未发送即被删除的情况发生,从而尽可能确保每条定时消息都能发送出去。
在一个具体的可实施方案中,所述方法还包括针对定时消息的定时消息追溯和定时消息恢复的步骤;
所述定时消息追溯的步骤为:将定时消息重新写入实际消息存储的日志文件后,将该定时消息在实际消息存储的日志文件里的物理偏移量写入定时消息写入的日志文件内,所述定时消息写入的日志文件用于在定时消息投递发生错误后对该定时消息进行追溯;
所述定时消息恢复的步骤为:获取定时消息写入的日志文件中最后时间段存储的定时消息在实际消息存储的日志文件里的物理偏移量,并根据物理偏移量所属的定时消息确定该定时消息的索引文件里的物理偏移量的情况和该定时消息写入的日志文件里的物理偏移量的情况;
根据定时消息写入的日志文件里的物理偏移量和定时消息的索引文件里的物理偏移量情况,判断定时消息是否投递成功;
若加入定时消息的索引文件里存在物理偏移量,而定时消息写入的日志文件里不存在物理偏移量,则判定为没有投递成功,并将定时消息重新投入时间轮中;
若加入定时消息的索引文件和定时消息写入的日志文件里均存在物理偏移量,则判定为投递成功,无需将定时消息重新投入时间轮中。
通过采用上述技术方案,由于时间轮基于内存,当消息中转部发生故障时,时间轮的信息将会丢失,定时消息写入的日志文件能够在消息中转部重启后确定哪些消息已投递,从而便于确定未投递的消息,并将未投递的消息继续进行投递,尽可能确保每条消息都能被投递出去,减少消息丢失的情况发生。
在一个具体的可实施方案中,所述定时消息写入的日志文件包括第一写入文件和第二写入文件,依次交替地将所述定时消息在实际消息存储的日志文件里的物理偏移量写进第一写入文件和第二写入文件,具体包括以下步骤:
A10、获取预设的计时值;
A20、将定时消息在实际消息存储的日志文件里的物理偏移量写入第一写入文件,并在写入物理偏移量的同时开始计时;
A30、当计时达到预设的计时值时,将计时清零,并在计时清零后重新计时,同时将定时消息在实际消息存储的日志文件里的物理偏移量写入第二写入文件,当计时再次达到预设的计时值,计时清零并跳转到A20。
通过采用上述技术方案,第一写入文件和第二写入文件依次循环进行定时消息在实际消息存储的日志文件里的物理偏移量的写入,能够使得写入的物理偏移量不会被完全覆盖,通过部分覆盖部分写入的方式,能够减少写入的物理偏移量无法查找的情况发生。
在一个具体的可实施方案中,所述当计时再次达到预设的计时值后包括:
清空第一写入文件和/或第二写入文件计时清零前接收到的定时消息在实际消息存储的日志文件里的物理偏移量,第一写入文件和/或第二写入文件接收计时清零后的定时消息在实际消息存储的日志文件里的物理偏移量。
第二方面,本申请提供一种自定义时间的定时消息发送系统,采用如下的技术方案;
一种自定义时间的定时消息发送系统,包括:生产端、消费端和消息中转部,所述生产端和消费端均与消息中转部通讯连接,所述消息中转部包括判断模块、消息接收部、普通消息处理模块、普通消息模块、主题隐藏模块、第一处理部、主题恢复模块、定时消息解析模块和定时消息模块,其中,
生产端用于发送消息到消息中转部;
判断模块用于判断消息为普通消息还是定时消息;
主题隐藏模块用于将定时消息的真实消息主题改为定时消息的专用消息主题;
消息接收部用于接收并存储判断模块发送出的普通消息,还用于接收并存储主题隐藏模块发出的消息主题为专用消息主题的定时消息;
普通消息处理模块用于获取消息接收部中的普通消息并建立普通消息索引;
普通消息输出模块用于根据消费端需求确定普通消息索引,并将普通消息索引投递给消费端;
第一处理部用于获取消息接收部中的定时消息并建立定时消息索引,并根据定时消息的消息投递时间对定时消息索引进行分类,将所述消息投递时间属于同一时间段内的定时消息索引存储在同一索引文件内;
定时消息解析模块用于对到达消息投递时间的定时消息索引进行解析,确定定时消息在消息接收部中的具体位置,并从消息接收部中取出定时消息;
主题恢复模块用于将定时消息的专用消息主题恢复成定时消息的真实消息主题;
定时消息输出模块用于将恢复成真实消息主题的定时消息投递到消息接收部中;
消费端用于消费消息接收部中的普通消息和定时消息。
通过采用上述技术方案,对定时消息进行定时消息隐藏处理,将定时消息存储到实际消息存储的日志文件内,使得消费端在实际消息存储的日志文件中暂时无法根据需求消费消息,在定时消息的消息投递时间即将到达时,再通过对定时消息索引进行定时消息读取处理,使得消费端能够在实际消息存储的日志文件中可以根据需求消费消息,本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
第三方面,本申请提供一种智能终端,采用如下的技术方案;
一种智能终端,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述任一所述的一种动态时间的定时消息发送方法。
通过采用上述技术方案,对定时消息进行定时消息隐藏处理,将定时消息存储到实际消息存储的日志文件内,使得消费端在实际消息存储的日志文件中暂时无法根据需求消费消息,在定时消息的消息投递时间即将到达时,再通过对定时消息索引进行定时消息读取处理,使得消费端能够在实际消息存储的日志文件中根据需求消费消息,本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
第四方面,本申请提供一种计算机可读存储介质,采用如下的技术方案;
一种计算机可读存储介质,包括可读存储介质及存储在所述可读存储介质上运行的计算机程序,所述计算机程序由处理器加载并执行以实现如上述任一所述的一种动态时间的定时消息发送方法。
通过采用上述技术方案,对定时消息进行定时消息隐藏处理,将定时消息存储到实际消息存储的日志文件内,使得消费端在实际消息存储的日志文件中暂时无法根据需求消费消息,在定时消息的消息投递时间即将到达时,再通过对定时消息索引进行定时消息读取处理,使得消费端能够在实际消息存储的日志文件中根据需求消费消息,本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
综上所述,本申请包括以下至少一种有益技术效果:
1.本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送自定义定时消息的场景。
2.定时消息写入的日志文件能够在消息中转部重启后确定哪些消息已投递,从而确定未投递的消息,继续进行投递。
3.第一写入文件和第二写入文件依次循环进行定时消息在实际消息存储的日志文件里的物理偏移量的写入,能够使得写入的物理偏移量不会被完全覆盖,通过部分覆盖部分写入的方式,能够减少写入的物理偏移量无法查找的情况发生。
附图说明
图1是本申请实施例中一种自定义时间的定时消息发送系统的整体结构示意图。
图2是本申请另一实施例中消息中转部的结构示意图。
图3是本申请又一实施例中第一处理部的结构示意图。
图4是本申请实施例中一种自定义时间的定时消息发送方法的整体流程示意图。
图5是本申请实施例中对定时消息索引进行分类的流程示意图。
图6是本申请实施例中对定时消息索引进行定时消息读取处理的流程示意图。
图7是本申请实施例中依次交替地将定时消息在实际消息存储的日志文件里的物理偏移量写进第一写入文件和第二写入文件的流程示意图。
附图标记说明:
1、生产端;2、消费端;3、消息中转部;31、判断模块;32、消息接收部;33、普通消息处理模块;34、普通消息模块;35、主题隐藏模块;36、第一处理部;361、定时消息处理模块;362、定时消息存储模块;37、定时消息解析模块;38、主题恢复模块;39、定时消息模块。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细说明。
本申请一个实施例公开一种自定义时间的定时消息发送系统,参照图1,该系统包括生产端1、消费端2和消息中转部3,生产端1和消费端2均与消息中转部3通讯连接。生产端1用于发送消息到消息中转部3,消息中转部3中的所有消息均存储在磁盘内,消息分为普通消息和定时消息,定时消息设有消息投递时间,普通消息为随时可投递的消息,定时消息为到达消息投递时间即可投递的消息。消息中转部3用于对磁盘内的普通消息进行预处理,使得消费端可以直接消费磁盘内的普通消息;消息中转部3用于对磁盘内的定时消息进行预处理,使得定时消息在没有到达消息投递时间之前无法被消费端2获取到,只有在定时消息到达消息投递时间时,消费端2才能消费到该定时消息。
在本申请另一个实施例中,参照图2,消息中转部3包括判断模块31和消息接收部32。判断模块31用于接收生产端1发送的消息,并根据消息的属性判断消息为普通消息还是定时消息,判断模块31还用于将判断出的普通消息或定时消息发送给消息接收部32;消息接收部32用于接收并存储判断模块31发送出的普通消息或定时消息。
其中,消息中转部3还包括普通消息处理模块33和普通消息模块34,普通消息处理模块33用于获取消息接收部32存储的普通消息,对普通消息进行解析,并建立普通消息索引。消费端2将订阅的消息主题发送给普通消息模块34,普通消息模块34用于根据消费端2订阅的消息主题,从普通消息处理模块33中获取相应的普通消息索引,并将相应的普通消息索引投递给消费端2,消费端2根据获取的普通消息索引消费消息接收部32内的普通消息。
举例来说,一共有两个消息主题,分别为消息主题A和消息主题B。生产端1M发送了消息主题为A的消息a和消息b,生产端1N发送了消息主题为B的消息c和消息d。若消费端2订阅了消息主题A的消息,则消费端2只需接收消息主题A投递的消息。在实施过程中,将消息a、消息b、消息c和消息d写入消息接收部32,普通消息处理模块33通过一个线程自动解析消息接收部32内的消息,异步解析后分别建立普通消息索引A和普通消息索引B。普通消息索引A用于查找消息a和消息b在消息接收部32内的位置,普通消息索引B用于查找消息c和消息d在消息接收部32内的位置。消费端2根据需求从普通消息模块34中获取普通消息索引A,消费端2根据普通消息索引A消费消息接收部内的消息a和消息b。
其中,消息中转部3还包括主题隐藏模块35和第一处理部36。主题隐藏模块35用于将判断模块31判断出的定时消息的真实消息主题改为定时消息的专用消息主题,并将修改后的定时消息存储在消息接收部32中。
在实施中,若定时消息的消息内容和普通消息的消息内容都属于同一消息主题,消费端在根据订阅的消息主题获取消息时,会无视定时消息的消息投递时间,同时获取消息内容属于该消息主题的定时消息和普通消息。由于消费端是可以根据定时消息的真实消息主题从消息接收部32中获取该定时消息,所以为了使得定时消息在到达消息投递时间之前无法被消费端消费,通过主题隐藏模块35对定时消息的真实消息主题进行更改。由于定时消息的真实消息主题被更改,消费端2无法根据定时消息的真实消息主题查找到该定时消息,因此消费端2暂时消费不到这条定时消息。
第一处理部36用于获取消息接收部32存储的真实消息主题被更改的定时消息,对该定时消息进行解析,并建立定时消息索引。
其中,消息中转部3还包括定时消息解析模块37、主题恢复模块38和定时消息模块39。定时消息解析模块37用于对到达消息投递时间的定时消息索引进行解析,从而确定定时消息在消息接收部32中的具体位置,并根据确定的具体位置从消息接收部32中取出定时消息;主题恢复模块38用于将取出的定时消息的专用消息主题恢复成真实消息主题;定时消息模块39用于将恢复成真实消息主题的定时消息投递到消息接收部32中。由于重新投递到消息接收部32中的定时消息已经到了消息投递时间,所以会按照普通消息的逻辑对该定时消息重新进行处理。
在实施中,定时消息模块39将恢复成真实消息主题的定时消息投递到消息接收部32中之后,消息接收部32中同时存在有消息主题为真实消息主题的定时消息和消息主题为专用消息主题的定时消息,为了尽可能确保磁盘有足够的容量,会定时对到达消息投递时间且消息主题为专用消息主题的定时消息进行删除。
在本申请又一实施例中,参照图3,第一处理部36包括定时消息处理模块361和定时消息存储模块362。定时消息处理模块361用于获取消息接收部32存储的定时消息,并根据定时消息建立定时消息索引;其中,定时消息存储模块362中预设有若干个对应不同时间段的索引文件,定时消息处理模块361用于根据获取的定时消息建立定时消息索引,并在建立定时消息索引之后将该定时消息索引按照其所属的时间段写入定时消息存储模块362中对应的索引文件内。
在本申请中,第一处理部36是在磁盘中,定时消息解析模块37和主题恢复模块38组成一个时间轮并在内存中。由于原先所有的普通消息均存储在磁盘内,所有的定时消息均需加载到内存中,内存的开销比较大。所以为了减少内存的开销,采用本申请方案,只需要通过时间轮提前一段时间加载最近时间段的索引文件并获取该索引文件内的定时消息索引再进行相应的处理即可,无需提前将所有的定时消息都加载进内存。
上述自定义时间的定时消息发送系统,通过主题隐藏模块35将定时消息的真实消息主题更改为定时消息的专用消息主题,使得消费端2无法根据真实消息主题从消息接收部32中消费到所订阅的定时消息;通过设定时间轮的方式,提前一段时间加载未来某段时间的定时消息;当到达消息投递时间时,通过主题恢复模块38将定时消息的专用消息主题恢复成定时消息的真实消息主题,并通过时间轮对到达消息投递时间的定时消息索引进行解析,从而确定定时消息在消息接收部32中的具体位置,最后将拥有真实消息主题的定时消息重新投递到消息接收部32中,供消费端2去消费。通过设定时间轮,解决了定时消息由于发送及投递顺序产生的排序问题。本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
下面结合自定义时间的定时消息发送系统对自定义时间的定时消息发送方法的实施进行详细说明:
参照图4,本申请另一实施例提供一种自定义时间的定时消息发送方法,包括以下步骤:
S10、获取生产端1发送的消息,并根据消息属性判断消息类型。
其中,消息类型分为普通消息和定时消息。
S20、根据消息类型分别对普通消息和定时消息进行处理。
当消息类型为普通消息时,将普通消息写入实际消息存储的日志文件中,并建立普通消息索引,随后将普通消息索引投递给消费端2,消费端2根据普通消息索引消费实际消息存储的日志文件中的普通消息。其中,投递给消费端2的普通消息索引对应的消息主题与消费端2订阅的消息主题一致,普通消息的消费处理逻辑为本领域的公知常识,在此不再赘述。
当消息类型为定时消息时,将定时消息发送到消息接收部32并存储至消息接收部32中实际消息存储的日志文件内,并生成定时消息索引。
在实施中,为了减少定时消息丢失的情况发生,在定时消息发送到消息接收部32后,会产生一个message ID,即生成一个系统返回信息的标识ID,这个标识ID表示这个信息的唯一性,可以通过这个标识ID再次拿到本条定时消息。
其中,将定时消息发送给消息接收部32之前,需要针对定时消息进行定时消息隐藏,定时消息隐藏具体包括以下步骤:
根据获取的定时消息,将定时消息的真实消息主题改为定时消息的专用消息主题;将定时消息的真实消息主题名以消息属性的方式存储在定时消息的消息体内;将消息投递时间隐藏在定时消息的消息标签内。
在实施中,由于定时消息的真实消息主题被更改,消费端2无法根据定时消息的真实消息主题查找到该定时消息,因此消费端2暂时消费不到这条定时消息。
举例来说,定时消息a的真实消息主题为A,定时消息a在被发送到消息接收部32之前,定时消息a的真实消息主题A被更为定时消息的专用消息主题B,消费端2订阅了消息主题为A的消息,由于定时消息a的真实消息主题被更改,因此消费端2无法在消息接收部32中查找到定时消息a。
S30、以预设时间段为基准提前n秒将消息投递时间在预设时间段内的定时消息对应的定时消息索引加载到时间轮内。
具体的,定时消息包括定时消息内容和消息投递时间。
其中,在将定时消息索引加载到时间轮内之前,会对定时消息索引进行分类,参照图5,具体包括以下步骤:
S31、将预设时间段分为若干个时间长度相等的分类时间子段;
S32、对预设时间段内所有定时消息索引进行分类,即将消息投递时间在同一分类时间子段内的定时消息索引分为一类;
S33、获取若干个预设的索引文件,索引文件与分类时间子段一一对应,将属于同一分类时间子段的定时消息索引添加到同一个索引文件内,索引文件的内容包括定时消息在实际消息存储的日志文件的物理偏移量、消息大小和消息投递时间。
在本申请实施例中,对所有的定时消息索引进行分类时,将同一个小时的定时消息索引写在同一个索引文件里,索引文件名以YYYYMMDDHH格式(年份月份日期小时)命名。在实施时,会提前加载未来一小时需要投递的定时消息,当消息投递时间即将到的时候,将该小时的索引文件提前加载到时间轮内。通过设定时间轮,解决了定时消息由于发送及投递顺序产生的排序问题,减小了系统的性能开销。
S40、到达消息投递时间时,获取时间轮中该消息投递时间对应的定时消息索引,并对定时消息索引进行定时消息读取处理。
其中,对定时消息索引进行定时消息读取处理,参照图6,具体包括以下步骤:
S41、根据定时消息在实际消息存储的日志文件的物理偏移量和消息大小,从实际消息存储的日志文件里取出定时消息;
S42、将取出的定时消息的专用消息主题改为定时消息的真实消息主题。
在本申请另一实施例,当消息中转部3发生故障时,定时消息的投递可能会出错。因此,本申请实施例还包括针对定时消息的定时消息追溯和定时消息恢复。定时消息追溯用于寻找消息中转部3发生故障时,未投递成功的定时消息;定时消息恢复用于将未投递成功的定时消息重新进行投递。
具体的,定时消息追溯的步骤包括:
将改为真实消息主题的定时消息重新写入实际消息存储的日志文件后,将该定时消息在实际消息存储的日志文件里的物理偏移量写入定时消息写入的日志文件内,定时消息写入的日志文件用于在定时消息投递发生错误后,找到未能成功投递的定时消息。
定时消息恢复的步骤包括:
获取定时消息写入的日志文件中最后时间段存储的定时消息在实际消息存储的日志文件里的物理偏移量,并根据物理偏移量所属的定时消息确定该定时消息的索引文件里的物理偏移量的情况和该定时消息写入的日志文件里的物理偏移量的情况;
根据定时消息写入的日志文件里的物理偏移量和定时消息的索引文件里的物理偏移量情况,判断定时消息是否投递成功;
若加入定时消息的索引文件里存在物理偏移量,而定时消息写入的日志文件里不存在物理偏移量,则判定为没有投递成功,并将定时消息重新投入时间轮中;
若加入定时消息的索引文件和定时消息写入的日志文件里均存在物理偏移量,则判定为投递成功,无需将定时消息重新投入时间轮中。
在实施中,在进行定时消息恢复时,会优先将两个小时作为最后时间段,若两个小时内的定时消息不包括所有已丢失的定时消息,则逐渐增加最后时间段的时长,直至检测出所有已丢失的定时消息。
在本实施例中,定时消息写入的日志文件包括第一写入文件和第二写入文件,依次交替地将定时消息在实际消息存储的日志文件里的物理偏移量写进第一写入文件和第二写入文件,参照图7,具体包括以下步骤:
A10、获取预设的计时值;
A20、将定时消息在实际消息存储的日志文件里的物理偏移量写入第一写入文件,并在写入物理偏移量的同时开始计时;
A30、当计时达到预设的计时值时,将计时清零,并在计时清零后重新计时,同时将定时消息在实际消息存储的日志文件里的物理偏移量写入第二写入文件,当计时再次达到预设的计时值,计时清零并跳转到A20。
在一个实施例中,预设的计时值为一个小时,若此刻为14点,第一写入文件的最新写入消息时间为13点,第二写入文件的最新写入时间为14点,若发送了一个14点20分的定时消息,则该定时消息会被写入第二写入文件内。
其中,当计时再次达到预设的计时值后,清空第一写入文件和/或第二写入文件计时清零前接收到的定时消息在实际消息存储的日志文件里的物理偏移量,第一写入文件和/或第二写入文件接收计时清零后的定时消息在实际消息存储的日志文件里的物理偏移量。
在一个实施例中,预设的计时值为一个小时,若此刻为13点,第一写入文件的最新写入消息时间为13点,第二写入文件的最新写入时间为13点,若发送了一个15点30分的消息,那么15点30分的消息将会清空并覆盖掉第一写入文件在13点到14点期间写入的消息。
在实施中,新接收的定时消息在实际消息存储的日志文件里的物理偏移量覆盖已发送的定时消息在实际消息存储的日志文件里的物理偏移量,减少存储文件个数,从而有效避免因文件查找和删除额外带来的复杂流程及磁盘开销。
S50、将定时消息读取处理得到的定时消息写入实际消息存储的日志文件内。
其中,由于写入实际消息存储的日志文件的定时消息已经到了消息投递时间,因此会按照普通消息的消息投递逻辑对该定时消息重新进行处理。
在本实施例中,实际消息存储的日志文件到期时需要将该日志文件删除。当实际消息存储的日志文件到期需要删除的时候,若该实际消息存储的日志文件里还存在未投递的定时消息,为了避免丢失消息,将无法删除实际消息存储的日志文件,导致磁盘容量无法释放。因此,在本实施中,会先将消息投递时间未到达的定时消息添加到最新的实时消息存储的日志文件内,之后再将所需删除的实际消息存储的日志文件删除。
在实施中,对定时消息进行定时消息隐藏处理,可以将定时消息存储到实际消息存储的日志文件内,使得消费端2在实际消息存储的日志文件中暂时查到不到定时消息的位置,在定时消息的消息投递时间即将到达时,再通过对定时消息索引进行定时消息读取处理,使得消费端2能够在实际消息存储的日志文件中查到定时消息的位置,从而便于消费端2消费定时消息,本申请无需通过预设固定级别,即可发送任意消息投递时间的定时消息,适用于更多需要发送定时消息的场景。
基于上述同一发明构思,本申请实施例还公开一种智能终端。一种智能终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现上述方法实施例提供的一种自定义时间的定时消息发送方法。
基于上述同一发明构思,本申请实施例还公开一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集能够由处理器加载并执行以实现上述方法实施例提供的一种自定义时间的定时消息发送方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质例如包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (8)
1.一种自定义时间的定时消息发送方法,其特征在于,包括:
获取生产端(1)发送的消息,并根据消息属性判断消息类型;
若消息类型为定时消息,对定时消息进行定时消息隐藏处理,将定时消息隐藏处理得到的定时消息存储至实际消息存储的日志文件内,并生成定时消息索引,所述定时消息包括定时消息内容和消息投递时间;
以预设时间段为基准提前n秒将消息投递时间在预设时间段内的定时消息对应的定时消息索引加载到时间轮内;
到达消息投递时间时,获取时间轮中该消息投递时间对应的定时消息索引,并对定时消息索引进行定时消息读取处理;
将定时消息读取处理得到的定时消息写入实际消息存储的日志文件内;
消费端(2)根据订阅的消息主题获取消息进行消费;
所述定时消息隐藏的步骤为:根据获取的定时消息,将定时消息的真实消息主题改为定时消息的专用消息主题,将所述定时消息的真实消息主题名以消息属性的方式存储在定时消息内,将所述定时消息的消息投递时间隐藏在定时消息的消息标签内;
所述方法还包括针对定时消息的定时消息追溯和定时消息恢复的步骤;
所述定时消息追溯的步骤为:将定时消息重新写入实际消息存储的日志文件后,将该定时消息在实际消息存储的日志文件里的物理偏移量写入定时消息写入的日志文件内,所述定时消息写入的日志文件用于在定时消息投递发生错误后对该定时消息进行追溯;
所述定时消息恢复的步骤为:获取定时消息写入的日志文件中最后时间段存储的定时消息在实际消息存储的日志文件里的物理偏移量,并根据物理偏移量所属的定时消息确定该定时消息的索引文件里的物理偏移量的情况和该定时消息写入的日志文件里的物理偏移量的情况;
根据定时消息写入的日志文件里的物理偏移量和定时消息的索引文件里的物理偏移量情况,判断定时消息是否投递成功;
若加入定时消息的索引文件里存在物理偏移量,而定时消息写入的日志文件里不存在物理偏移量,则判定为没有投递成功,并将定时消息重新投入时间轮中;
若加入定时消息的索引文件和定时消息写入的日志文件里均存在物理偏移量,则判定为投递成功,无需将定时消息重新投入时间轮中;
所述定时消息写入的日志文件包括第一写入文件和第二写入文件,依次交替地将所述定时消息在实际消息存储的日志文件里的物理偏移量写进第一写入文件和第二写入文件,具体包括以下步骤:
A10、获取预设的计时值;
A20、将定时消息在实际消息存储的日志文件里的物理偏移量写入第一写入文件,并在写入物理偏移量的同时开始计时;
A30、当计时达到预设的计时值时,将计时清零,并在计时清零后重新计时,同时将定时消息在实际消息存储的日志文件里的物理偏移量写入第二写入文件,当计时再次达到预设的计时值,计时清零并跳转到A20。
2.根据权利要求1所述的一种自定义时间的定时消息发送方法,其特征在于,所述以预设时间段为基准提前n秒将消息投递时间在预设时间段内的定时消息对应的定时消息索引加载到时间轮内之前包括:
将预设时间段分为若干个时间长度相等的分类时间子段,并对预设时间段内所有定时消息索引按照定时消息所属的消息投递时间进行分类;
将属于同一分类时间子段的定时消息索引添加到同一个索引文件内,所述索引文件的内容包括定时消息在实际消息存储的日志文件的物理偏移量、消息大小和消息投递时间。
3.根据权利要求2所述的一种自定义时间的定时消息发送方法,其特征在于,所述定时消息读取的步骤为:根据定时消息在实际消息存储的日志文件的物理偏移量和消息大小,从实际消息存储的日志文件里取出定时消息,将定时消息的专用消息主题改回定时消息的真实消息主题。
4.根据权利要求3所述的一种自定义时间的定时消息发送方法,其特征在于,所述方法还包括针对定时消息的定时消息回放的步骤:
所述实际消息存储的日志文件到期时需要将该日志文件删除,若所需删除的实际消息存储的日志文件内存在未投递的定时消息,则需要先将未投递的定时消息添加到最新的实际消息存储的日志文件中,再将所需删除的实际消息存储的日志文件删除。
5.根据权利要求4所述的一种自定义时间的定时消息发送方法,其特征在于,所述当计时再次达到预设的计时值后包括:
清空第一写入文件和/或第二写入文件计时清零前接收到的定时消息在实际消息存储的日志文件里的物理偏移量,第一写入文件和/或第二写入文件接收计时清零后的定时消息在实际消息存储的日志文件里的物理偏移量。
6.一种自定义时间的定时消息发送系统,其特征在于,包括:生产端(1)、消费端(2)和消息中转部(3),所述生产端(1)和消费端(2)均与消息中转部(3)通讯连接,所述消息中转部(3)包括判断模块(31)、消息接收部(32)、普通消息处理模块(33)、普通消息模块(34)、主题隐藏模块(35)、第一处理部(36)、主题恢复模块(38)、定时消息解析模块(37)和定时消息模块(39),其中,
生产端(1)用于发送消息到消息中转部(3);
判断模块(31)用于判断消息为普通消息还是定时消息;
主题隐藏模块(35)用于将定时消息的真实消息主题改为定时消息的专用消息主题;
消息接收部(32)用于接收并存储判断模块(31)发送出的普通消息,还用于接收并存储主题隐藏模块(35)发出的消息主题为专用消息主题的定时消息;
普通消息处理模块(33)用于获取消息接收部(32)中的普通消息并建立普通消息索引;
普通消息输出模块用于根据消费端(2)需求确定普通消息索引,并将普通消息索引投递给消费端(2);
第一处理部(36)用于获取消息接收部(32)中的定时消息并建立定时消息索引,并根据定时消息的消息投递时间对定时消息索引进行分类,将所述消息投递时间属于同一时间段内的定时消息索引存储在同一索引文件内;
定时消息解析模块(37)用于对到达消息投递时间的定时消息索引进行解析,确定定时消息在消息接收部(32)中的具体位置,并从消息接收部(32)中取出定时消息;
主题恢复模块(38)用于将定时消息的专用消息主题恢复成定时消息的真实消息主题;
定时消息输出模块用于将恢复成真实消息主题的定时消息投递到消息接收部(32)中;
消费端(2)用于消费消息接收部(32)中的普通消息和定时消息;
消费端(2)根据订阅的消息主题获取消息进行消费;
所述主题隐藏模块(35)具体用于:根据获取的定时消息,将定时消息的真实消息主题改为定时消息的专用消息主题,将所述定时消息的真实消息主题名以消息属性的方式存储在定时消息内,将所述定时消息的消息投递时间隐藏在定时消息的消息标签内;
所述系统还包括定时消息追溯和定时消息恢复的步骤;
所述定时消息追溯的步骤为:将定时消息重新写入实际消息存储的日志文件后,将该定时消息在实际消息存储的日志文件里的物理偏移量写入定时消息写入的日志文件内,所述定时消息写入的日志文件用于在定时消息投递发生错误后对该定时消息进行追溯;
所述定时消息恢复的步骤为:获取定时消息写入的日志文件中最后时间段存储的定时消息在实际消息存储的日志文件里的物理偏移量,并根据物理偏移量所属的定时消息确定该定时消息的索引文件里的物理偏移量的情况和该定时消息写入的日志文件里的物理偏移量的情况;
根据定时消息写入的日志文件里的物理偏移量和定时消息的索引文件里的物理偏移量情况,判断定时消息是否投递成功;若加入定时消息的索引文件里存在物理偏移量,而定时消息写入的日志文件里不存在物理偏移量,则判定为没有投递成功,并将定时消息重新投入时间轮中;若加入定时消息的索引文件和定时消息写入的日志文件里均存在物理偏移量,则判定为投递成功,无需将定时消息重新投入时间轮中;
所述定时消息写入的日志文件包括第一写入文件和第二写入文件,依次交替地将所述定时消息在实际消息存储的日志文件里的物理偏移量写进第一写入文件和第二写入文件,具体包括以下步骤:
A10、获取预设的计时值;
A20、将定时消息在实际消息存储的日志文件里的物理偏移量写入第一写入文件,并在写入物理偏移量的同时开始计时;
A30、当计时达到预设的计时值时,将计时清零,并在计时清零后重新计时,同时将定时消息在实际消息存储的日志文件里的物理偏移量写入第二写入文件,当计时再次达到预设的计时值,计时清零并跳转到A20。
7.一种智能终端,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5任一所述的一种自定义时间的定时消息发送方法。
8.一种计算机可读存储介质,其特征在于,包括存储在所述可读存储介质上的计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至5任一所述的一种自定义时间的定时消息发送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210671656.0A CN115242744B (zh) | 2022-06-15 | 2022-06-15 | 自定义时间的定时消息发送方法、系统、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210671656.0A CN115242744B (zh) | 2022-06-15 | 2022-06-15 | 自定义时间的定时消息发送方法、系统、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115242744A CN115242744A (zh) | 2022-10-25 |
CN115242744B true CN115242744B (zh) | 2024-02-02 |
Family
ID=83668965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210671656.0A Active CN115242744B (zh) | 2022-06-15 | 2022-06-15 | 自定义时间的定时消息发送方法、系统、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115242744B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060062966A (ko) * | 2004-12-06 | 2006-06-12 | 엘지전자 주식회사 | Ota를 이용한 이동 통신 시스템의 타이머 설정 방법 및그 시스템 |
WO2007041913A1 (en) * | 2005-10-11 | 2007-04-19 | Huawei Technologies Co., Ltd. | A method for processing a deferred message |
CN102244849A (zh) * | 2011-06-24 | 2011-11-16 | 中兴通讯股份有限公司 | 一种定时短信发送的方法及装置 |
WO2013149290A1 (en) * | 2012-04-04 | 2013-10-10 | Not Now Pty Ltd | An electronic message management system |
CN108415759A (zh) * | 2017-02-09 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 消息的处理方法、装置和电子设备 |
CN109450778A (zh) * | 2018-12-28 | 2019-03-08 | 北京爱奇艺科技有限公司 | 一种消息延时投递方法、装置及设备 |
CN109726024A (zh) * | 2018-12-28 | 2019-05-07 | 北京爱奇艺科技有限公司 | 一种消息延时投递方法、装置及设备 |
US10554604B1 (en) * | 2017-01-04 | 2020-02-04 | Sprint Communications Company L.P. | Low-load message queue scaling using ephemeral logical message topics |
WO2021062739A1 (zh) * | 2019-09-30 | 2021-04-08 | 华为技术有限公司 | 一种分布式系统中消息的同步方法及装置 |
CN112966005A (zh) * | 2021-03-08 | 2021-06-15 | 平安科技(深圳)有限公司 | 定时消息发送方法、装置、计算机设备以及存储介质 |
CN114116253A (zh) * | 2021-11-04 | 2022-03-01 | 有半岛(北京)信息科技有限公司 | 一种消息队列的消息处理方法及系统 |
-
2022
- 2022-06-15 CN CN202210671656.0A patent/CN115242744B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060062966A (ko) * | 2004-12-06 | 2006-06-12 | 엘지전자 주식회사 | Ota를 이용한 이동 통신 시스템의 타이머 설정 방법 및그 시스템 |
WO2007041913A1 (en) * | 2005-10-11 | 2007-04-19 | Huawei Technologies Co., Ltd. | A method for processing a deferred message |
CN102244849A (zh) * | 2011-06-24 | 2011-11-16 | 中兴通讯股份有限公司 | 一种定时短信发送的方法及装置 |
WO2013149290A1 (en) * | 2012-04-04 | 2013-10-10 | Not Now Pty Ltd | An electronic message management system |
US10554604B1 (en) * | 2017-01-04 | 2020-02-04 | Sprint Communications Company L.P. | Low-load message queue scaling using ephemeral logical message topics |
CN108415759A (zh) * | 2017-02-09 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 消息的处理方法、装置和电子设备 |
CN109450778A (zh) * | 2018-12-28 | 2019-03-08 | 北京爱奇艺科技有限公司 | 一种消息延时投递方法、装置及设备 |
CN109726024A (zh) * | 2018-12-28 | 2019-05-07 | 北京爱奇艺科技有限公司 | 一种消息延时投递方法、装置及设备 |
WO2021062739A1 (zh) * | 2019-09-30 | 2021-04-08 | 华为技术有限公司 | 一种分布式系统中消息的同步方法及装置 |
CN112966005A (zh) * | 2021-03-08 | 2021-06-15 | 平安科技(深圳)有限公司 | 定时消息发送方法、装置、计算机设备以及存储介质 |
CN114116253A (zh) * | 2021-11-04 | 2022-03-01 | 有半岛(北京)信息科技有限公司 | 一种消息队列的消息处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115242744A (zh) | 2022-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107515874B (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
CN103209153B (zh) | 消息处理方法、装置及系统 | |
CN109918349A (zh) | 日志处理方法、装置、存储介质和电子装置 | |
CN101969386A (zh) | 一种日志采集装置和日志采集方法 | |
CN109756760A (zh) | 视频标签的生成方法、装置及服务器 | |
CN104850556B (zh) | 一种数据处理的方法及装置 | |
CN109787884B (zh) | 一种消息推送方法和装置 | |
CN110968431A (zh) | 一种消息处理方法、装置及设备 | |
CN109766422A (zh) | 信息处理方法、装置及系统、存储介质、终端 | |
CN111371672A (zh) | 消息推送方法及装置 | |
CN111126071B (zh) | 提问文本数据的确定方法、装置和客服群的数据处理方法 | |
CN115242744B (zh) | 自定义时间的定时消息发送方法、系统、终端及存储介质 | |
CN112433885A (zh) | 区块链共识处理方法及装置、电子设备、存储介质 | |
US11250080B2 (en) | Method, apparatus, storage medium and electronic device for establishing question and answer system | |
CN109977090A (zh) | 一种向hdfs写入数据的方法及终端 | |
CN111539206A (zh) | 一种确定敏感信息的方法、装置、设备及存储介质 | |
US20190208471A1 (en) | Smart card control method and device, terminal device and smart card | |
US5768514A (en) | Cooperative activity system and method | |
CN113098978B (zh) | 一种数据传输方法、装置及介质 | |
CN103856535A (zh) | 一种获取用户数据的方法和装置 | |
CN113988954A (zh) | 理财产品营销方法及装置 | |
CN110674275B (zh) | 一种知识问答的方法及装置 | |
CN114493701A (zh) | 一种用户分群的方法和装置 | |
CN105391619A (zh) | 一种保证消息显示顺序的方法和电子设备 | |
CN111752950B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |