消息队列的重发方法及装置、电子设备及存储介质制造方法及图纸

技术编号:38619897 阅读:9 留言:0更新日期:2023-08-31 18:24
本申请提供了一种消息队列的重发方法及装置、电子设备及存储介质,涉及分布式技术。该方法包括获取消息发送表,基于消息发送表获取消息发送表中每条消息的分布式锁记录;基于分布式锁记录,判断消息的分布式锁状态;在分布式锁处于未锁定状态时,基于分布式锁记录确定消息的轮询起点;基于轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的消息进行重发。通过本申请的方法可以实现降低生产者消息丢失率提高消息发送可靠性的技术效果。者消息丢失率提高消息发送可靠性的技术效果。者消息丢失率提高消息发送可靠性的技术效果。

【技术实现步骤摘要】
消息队列的重发方法及装置、电子设备及存储介质


[0001]本申请涉及分布式技术,尤其涉及一种消息队列的重发方法及装置、电子设备及存储介质。

技术介绍

[0002]在数据业务技术中,消息是指在两台计算机间传送的数据单位,消息队列则是在消息的传输过程中保存消息的容器,是一种分布式应用间交换信息的信息处理技术,主要用于保证消息的传递,为应用程序提供消息处理和消息队列功能。通过生产、消费的操作将消息推送至容器或拉取出来,这种处理机制能够有效降低分布式系统的耦合性,简化各子节点之间的通讯复杂性。在现有技术中,消息队列一般采用异步方式生产消息,当生产者使用调用发送消息当方法时,通过设置回调函数,并根据消息的发送状态确定下一步动作,例如,当消息发送失败时,可以在回调函数中设置重发操作。
[0003]而当网络发生异常时,生产者无法收到回调函数,即此时生产者无法判断本次消息的实际发送状态是否成功,继而无法及时处理生产者消息,因此,现有的消息队列的重发方法存在生产者消息丢失率高可靠性低的技术问题。

技术实现思路

[0004]本申请提供一种消息队列的重发方法及装置、电子设备及存储介质,用以解决生产者消息丢失率高可靠性低的技术问题。
[0005]第一方面,本申请提供一种消息队列的重发方法,包括:
[0006]获取消息发送表,基于消息发送表获取消息发送表中每条消息的分布式锁记录;
[0007]基于分布式锁记录,判断消息的分布式锁状态;
[0008]在分布式锁处于未锁定状态时,基于分布式锁记录确定消息的轮询起点;
[0009]基于轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的消息进行重发。
[0010]可选地,基于分布式锁记录确定消息的轮询起点,包括:
[0011]基于分布式锁记录确定消息的分布式锁的上一次处理时间;
[0012]基于分布式锁的上一次处理时间与当前时间,确定消息的轮询起点。
[0013]可选地,基于分布式锁的上一次处理时间与当前时间,确定消息的轮询起点,包括:
[0014]基于预设时间间隔确定多个时间区间,并将当前时间对应的时间区间确定为游标分区;
[0015]判断分布式锁的上一次处理时间与预设时间间隔之和是否晚于当前时间;
[0016]若是,则将游标分区确定为消息的轮询起点。
[0017]可选地,基于分布式锁的上一次处理时间与当前时间,确定消息的轮询起点,还包括:
[0018]在分布式锁的上一次处理时间与预设时间间隔之和早于当前时间时,将分布式锁的上一次处理时间对应的时间分区确定为消息的轮询起点。
[0019]可选地,基于轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的消息进行重发之后,重发方法还包括:
[0020]基于轮询起点,确定多个时间分区的轮询顺序;
[0021]基于轮询顺序,对下一时间分区中满足预设条件的消息进行重发;其中,预设条件是指发送时间超过预设时长且发送次数不超过预设阈值。
[0022]可选地,基于轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的消息进行重发,包括:
[0023]获取消息发送表中轮询起点对应的至少一个第一消息,并获取第一消息的发送状态;
[0024]将发送状态为发送中的第一消息确定为第二消息,获取第二消息的发送时间;
[0025]将发送时间超过预设时长的第二消息确定为第三消息,获取第三消息的发送次数;
[0026]对发送次数超过预设阈值的第三消息进行重发。
[0027]可选地,在获取消息发送表之前,包括:
[0028]基于斯普瑞布特spring boot读取目标数据源,并建立MyBat is与目标数据源所在的数据库之间的连接;
[0029]基于MyBatis与目标数据源所在的数据库的连接,将目标数据源缓存至斯普瑞布特spring boot相应的容器之中;
[0030]定时扫描斯普瑞布特spring boot相应的容器中的目标数据源,基于目标数据源中处于发送中或发送失败的消息建立消息发送表。
[0031]第二方面,本申请提供一种消息队列的重发装置,包括:
[0032]获取模块,用于获取消息发送表,基于消息发送表获取消息发送表中每条消息的分布式锁记录;
[0033]判断模块,用于基于分布式锁记录,判断消息的分布式锁状态;
[0034]确定模块,用于在分布式锁处于未锁定状态时,基于分布式锁记录确定消息的轮询起点;
[0035]重发模块,用于基于轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的消息进行重发。
[0036]可选地,确定模块用于:
[0037]基于分布式锁记录确定消息的分布式锁的上一次处理时间;
[0038]基于分布式锁的上一次处理时间与当前时间,确定消息的轮询起点。
[0039]可选地,确定模块还用于:
[0040]基于预设时间间隔确定多个时间区间,并将当前时间对应的时间区间确定为游标分区;
[0041]判断分布式锁的上一次处理时间与预设时间间隔之和是否晚于当前时间;
[0042]若是,则将游标分区确定为消息的轮询起点。
[0043]可选地,确定模块还用于:
[0044]在分布式锁的上一次处理时间与预设时间间隔之和早于当前时间时,将分布式锁的上一次处理时间对应的时间分区确定为消息的轮询起点。
[0045]可选地,装置还用于:
[0046]基于轮询起点,确定多个时间分区的轮询顺序;
[0047]基于轮询顺序,对下一时间分区中满足预设条件的消息进行重发;其中,预设条件是指发送时间超过预设时长且发送次数不超过预设阈值。
[0048]可选地,装置还用于:
[0049]获取消息发送表中轮询起点对应的至少一个第一消息,并获取第一消息的发送状态;
[0050]将发送状态为发送中的第一消息确定为第二消息,获取第二消息的发送时间;
[0051]将发送时间超过预设时长的第二消息确定为第三消息,获取第三消息的发送次数;
[0052]对发送次数超过预设阈值的第三消息进行重发。
[0053]可选地,装置还用于:
[0054]基于斯普瑞布特spring boot读取目标数据源,并建立MyBat is与目标数据源所在的数据库之间的连接;
[0055]基于MyBatis与目标数据源所在的数据库的连接,将目标数据源缓存至斯普瑞布特spring boot相应的容器之中;
[0056]定时扫描斯普瑞布特spring boot相应的容器中的目标数据源,基于目标数据源中处于发送中或发送失败的消息建立消息发送表。
[0057]第三方面,本申请提供一种电子设备,包括:处理器,以及与处理器通信连接的存储器;
[0058]存储器存储计算机执行指令;
[0059]处理器执行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种消息队列的重发方法,其特征在于,包括:获取消息发送表,基于所述消息发送表获取所述消息发送表中每条消息的分布式锁记录;基于所述分布式锁记录,判断所述消息的分布式锁状态;在所述分布式锁处于未锁定状态时,基于所述分布式锁记录确定所述消息的轮询起点;基于所述轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的所述消息进行重发。2.根据权利要求1所述的重发方法,其特征在于,所述基于所述分布式锁记录确定所述消息的轮询起点,包括:基于所述分布式锁记录确定所述消息的分布式锁的上一次处理时间;基于所述分布式锁的上一次处理时间与当前时间,确定所述消息的轮询起点。3.根据权利要求2所述的重发方法,其特征在于,所述基于所述分布式锁的上一次处理时间与当前时间,确定所述消息的轮询起点,包括:基于预设时间间隔确定多个时间区间,并将当前时间对应的时间区间确定为游标分区;判断所述分布式锁的上一次处理时间与所述预设时间间隔之和是否晚于当前时间;若是,则将所述游标分区确定为所述消息的所述轮询起点。4.根据权利要求3所述的重发方法,其特征在于,所述基于所述分布式锁的上一次处理时间与当前时间,确定所述消息的轮询起点,还包括:在所述分布式锁的上一次处理时间与所述预设时间间隔之和早于当前时间时,将所述分布式锁的上一次处理时间对应的时间分区确定为所述消息的所述轮询起点。5.根据权利要求4所述的重发方法,其特征在于,在所述基于所述轮询起点,对发送时间超过预设时长且发送次数不超过预设阈值的所述消息进行重发之后,所述重发方法还包括:基于所述轮询起点,确定多个所述时间分区的轮询顺序;基于所述轮询顺序,对下一时间分区中满足预设条件的所述消息进行重发;其中,所述预设条件是指发送时间超过所述预设时长且发送次数不超过所述预设阈值。6.根据权利要求4所述的重发方法,其特征在于,所述基于所述轮询起点,对发送时间超过预设...

【专利技术属性】
技术研发人员:王艺羲杨涛王丹刘新兰赵春晖雷声朱伟王婧梁文婧安妮
申请(专利权)人:中国银行股份有限公司
类型:发明
国别省市:

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

1