System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及信息通讯,特别是一种消息队列的消息消费失败的重试方法及系统。
技术介绍
1、在数据传输领域,以消息通知作为交互模式的应用系统越来越多。在消息传输时,由于双方系统或传输链路的故障,导致消息在传输过程中丢失而不能及时、可靠的送达。针对这一问题,形成了各种不同的消息重发机制,用于重新发送未成功送达的消息。
2、现有的spring retry构架集成了一套消息消费失败后的重试机制,但重试是同步阻塞进行的,也就意味着如果当前有一条消息消费失败后会进行延时重试。若消费失败的消息在延时等待的过程中,如果有其它新进来的消息,新进来的消息是会被阻塞住的,新的消息需要在消费失败的消息被消费或者消费失败的消息重试时间结束后才能进行发送。
3、所以现有采用重发机制,在第一次发送不成功的情况下,能够进行多次的发送尝试,在很大程度上解决了消息发送不能送达的问题。但对于新进来的消息发送并不友好。由于多次的尝试重发,即浪费发送时间又占用系统资源,造成了发送效率的低下。
技术实现思路
1、针对上述缺陷,本专利技术的目的在于提出一种消息队列的消息消费失败的重试方法及系统,避免消费失败的消息堵塞在消息队列中,影响消息的发送效率。
2、为达此目的,本专利技术采用以下技术方案:一种消息队列的消息消费失败的重试方法,包括以下步骤:
3、步骤s1:构建数量合集,其中所述数量合集包括重试数量集、新消息集与空闲消费者集;
4、步骤s2:分别监测交换机、消息队
5、步骤s3:判断当前消息队列中,位于队伍最前方的消息是否正在被消费者所消费,若正在被消费者所消费,则空闲消费者集的数量减1,当被消费者所成功消费,所述新消息集数量减1,空闲消费者集的数量加1,当未被消费者所成功消费,则将消费失败的消息转移至交换机中,进行延迟发送,对重试数量集的数量加1,对所述新消息集的数量减1,空闲消费者集的数量加1;
6、其中延迟发送具体如下:消费失败消息在交换机中等待预设的时间后,判断该消费失败消息的重试次数是否大于次数阈值,若小于等于次数阈值,则重新发送至消息队列中进行排队,若大于次数阈值,则不进行发送。
7、优选的,所述延迟发送还包括如下步骤:
8、判断当前新消息集的数量是否为0,若为0,则判断当前空闲消费者集的数量与重试数量集的数量是否均大于1,若均大于1,则停止交换机中剩余等待时间最少的消费失败消息的等待时间,并将该消息发送至消息队列中,若消息被成功消费,重试数量集的数量减1,若消息未被成功消费,则重试数量集的数量不变,将消息重新发送至交换机中进行排队。
9、优选的,当消费失败消息的等待时间被停止时,执行如下步骤:
10、在该消息的头部增加时间标识,该时间标识用于获取消息重新进入消息队列的时间以及剩余等待时间,以消息重新进入消息队列的时间作为第一时间,以剩余等待时间作为第二时间;
11、当消费失败消息重新发送至交换机中进行排队时,执行如下步骤:
12、通过时间标识获取消息重新进入消息队列进行重试后的时间,作为第三时间;
13、获取第三时间与第一时间的差值,作为第一时间差,判断第一时间差是否大于等于第二时间,若第一时间差大于等于第二时间,则消息的重试次数+1,消息重新进入等待时间,若第一时间差小于第二时间,则消息的剩余等待时间等于第二时间减去第一时间差。
14、优选的,消息在所述交换机中的等待时间随重试次数的增加而增加。
15、一种消息队列的消息消费失败的重试系统包括:构建模块、监控模块与重试模块;
16、所述构建模块用于构建数量合集,其中所述数量合集包括重试数量集、新消息集与空闲消费者集;
17、所述监控模块用于分别监测交换机、消息队列与消费者信息,将交换机中重试的消息数量更新至重试数量集,将消息队列中的新消息数量更新至新消息集,将消费者数量更新至空闲消费者集;
18、所述重试模块用于判断当前消息队列中,位于队伍最前方的消息是否正在被消费者所消费,若正在被消费者所消费,则空闲消费者集的数量减1,当被消费者所成功消费,所述新消息集数量减1,空闲消费者集的数量加1,当未被消费者所成功消费,则将消费失败的消息转移至交换机中,进行延迟发送,对重试数量集的数量加1,对所述新消息集的数量减1,空闲消费者集的数量加1;
19、其中延迟发送具体如下:消费失败消息在交换机中等待预设的时间后,判断该消费失败消息的重试次数是否大于次数阈值,若小于等于次数阈值,则重新发送至消息队列中进行排队,若大于次数阈值,则不进行发送。
20、优选的,所述重试模块包括:判断子模块;
21、所述判断子模块用于判断当前新消息集的数量是否为0,若为0,则判断当前空闲消费者集的数量与重试数量集的数量是否均大于1,若均大于1,则停止交换机中剩余等待时间最少的消费失败消息的等待时间,并将该消息发送至消息队列中,若消息被成功消费,重试数量集的数量减1,若消息未被成功消费,则重试数量集的数量不变,将消息重新发送至交换机中进行排队。
22、优选的,所述判断子模块包括时间获取子模块以及重新计时子模块;
23、所述时间获取子模块用于在当消费失败消息的等待时间被停止时,在该消息的头部增加时间标识,该时间标识用于获取消息重新进入消息队列的时间以及剩余等待时间,以消息重新进入消息队列的时间作为第一时间,以剩余等待时间作为第二时间;
24、所述重新计时子模块用于在消费失败消息重新发送至交换机中进行排队时,通过时间标识获取消息重新进入消息队列进行重试后的时间,作为第三时间;
25、获取第三时间与第一时间的差值,作为第一时间差,判断第一时间差是否大于等于第二时间,若第一时间差大于等于第二时间,则消息的重试次数+1,消息重新进入等待时间,若第一时间差小于第二时间,则消息的剩余等待时间等于第二时间减去第一时间差。
26、优选的,还包括分组模块,所述分组用于将预设的等待时间分割为多组,每一组的等待时间随重试次数的增加而增加。
27、上述技术方案中的一个技术方案具有如下优点或有益效果:当消息队列中位于最前方的消息没有被消费者所消费时,该消息会进入到交换机中,此时新消息集数量减1,重试数量集的数量加1,而且会在该消息的头部增加延迟标志,交换机会根据延迟标志对该信息进行延迟发送,即该消息在交换机中等待相应的时间后,才会重新进入到消息队列中进行排队。此时新消息集数量加1,重试数量集的数量减1,通过将没有被成功消费的消息从所述消息队列中移出,不会影响到后续新消息的消费,从而减少系统所占用的资源,提高发送的效率,同时,被移出到交换机中的消息可以在等待预设的时间后重新进入到消息队列中进行排队,不会影响消本文档来自技高网...
【技术保护点】
1.一种消息队列的消息消费失败的重试方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种消息队列的消息消费失败的重试方法,其特征在于,所述延迟发送还包括如下步骤:
3.根据权利要求2所述的一种消息队列的消息消费失败的重试方法,其特征在于,
4.根据权利要求2所述的一种消息队列的消息消费失败的重试方法,其特征在于,消息在所述交换机中的等待时间随重试次数的增加而增加。
5.一种消息队列的消息消费失败的重试系统,其特征在于,包括:构建模块、监控模块与重试模块;
6.根据权利要求5所述的一种消息队列的消息消费失败的重试系统,其特征在于,所述重试模块包括:判断子模块;
7.根据权利要求5所述的一种消息队列的消息消费失败的重试系统,其特征在于,所述判断子模块包括时间获取子模块以及重新计时子模块;
8.根据权利要求5所述的一种消息队列的消息消费失败的重试系统,其特征在于,还包括分组模块,所述分组用于将预设的等待时间分割为多组,每一组的等待时间随重试次数的增加而增加。
【技术特征摘要】
1.一种消息队列的消息消费失败的重试方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种消息队列的消息消费失败的重试方法,其特征在于,所述延迟发送还包括如下步骤:
3.根据权利要求2所述的一种消息队列的消息消费失败的重试方法,其特征在于,
4.根据权利要求2所述的一种消息队列的消息消费失败的重试方法,其特征在于,消息在所述交换机中的等待时间随重试次数的增加而增加。
5.一种消息队列的消息消费失败的重试系统,其特征在于,...
【专利技术属性】
技术研发人员:吕火生,孔令超,陈啟铭,何健进,李杰,罗兆源,麦嘉伟,
申请(专利权)人:佛山众陶联供应链服务有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。