本发明涉及分布式系统,特别涉及一种基于动态指数退避和动态负载均衡的消息重试方法及设备。
背景技术:
1、现有技术中,消息队列(message queue,mq)在分布式系统中应用十分广泛,其在解耦、异步和削峰等问题的解决上,起到了很大的作用。目前,主流的mq都支持失败重试策略的配置,当mq消息消费失败时,可在一定时间内进行重试。但这些重试策略,都是由mq的消息协商器broker来控制的,消费者基本无法干预。
2、对于mq消息的失败重试策略,消费者基本上无法知晓其在什么时间节点停止重试消费。有时消费者需要在mq消息停止重试时,做一些业务处理。或者消费者在消费消息时,想要自主控制重试的次数和重试的时长等。
技术实现思路
1、本发明要解决的主要技术问题是:如何自主设计最佳重试时间,避免过多无效重试,提高重试成功率,降低资源消耗。为了解决该技术问题,本发明采取的技术方案是:提供了一种基于动态指数退避和动态负载均衡的消息重试方法及设备。
2、根据本发明的第一方面,本发明提供了一种基于动态指数退避和动态负载均衡的消息重试方法,应用于消息队列的消息者端,包括以下步骤:
3、接收消息队列的消息协商器下发的目标消息及其对应的创建时间、已重试次数、总重试次数、过期时间和时隙时间;
4、在消费所述目标消息时,根据所述已重试次数和所述总重试次数,判断所述目标消息是否是最后一次重试;
5、若是,则在所述目标消息消费失败时,结束对所述目标消息的重试;
6、或,
7、在消费所述目标消息时,根据所述创建时间和所述过期时间,判断所述目标消息是否允许继续重试;
8、若是,则向所述消息协商器发起所述目标消息的重试请求,所述重试请求包括重试时间,所述重试时间根据动态指数退避时间加动态负载因子计算得到;在再次消费所述目标消息后,若所述目标消息消费失败,则结束对所述目标消息的重试;
9、若否,则在所述目标消息消费失败时,结束对所述目标消息的重试。
10、进一步地,所述重试时间的计算公式如下:
11、q=e(c)×f
12、其中,q表示重试时间,e(c)表示指数退避时间,f表示动态负载因子。
13、进一步地,所述方法还包括:
14、计算指数退避时间,退避时间的均匀分布,退避时间的数学期望是所有可能性的平均值,也就是说,在c次冲突之后,退避时隙数量在[0,1,...,n]中,其中n=2c-1,则退避时间的数学期望为以下表达式:
15、
16、式中,c表示冲突次数,即重试失败的次数。
17、进一步地,所述方法还包括:
18、根据当前应用ip、应用名称作为参数,调用负载监控系统;
19、由负载监控系统根据应用节点负载情况,实时计算获取当前的动态负载因子值,计算公式如下:
20、
21、其中,n表示节点数,pi表示第i个节点处理数,pmi表示第i个节点最大处理数,i大于零且小于等于n,f表示动态负载因子。
22、此外,根据本发明的另一方面,还提供了一种基于动态指数退避和动态负载均衡的消息重试方法,应用于消息队列的消息者协商器端,包括以下步骤:
23、从消息的生产者接收目标消息;
24、记录所述目标消息的创建时间和已重试次数,并为所述目标消息配置过期时间、可重试的总重试次数和时隙时间;
25、将所述目标消息及其对应的所述创建时间、所述已重试次数、所述总重试次数、过期时间及时隙时间一并下发给对应的消费者;
26、若所述目标消息在消费者端消费失败,从所述消息协商器接收所述目标消息的重试请求时,累计所述目标消息的已重试次数、重试时长;其中所述重试请求包括重试时间,所述重试时间根据动态指数退避时间加动态负载因子计算得到。
27、进一步地,所述方法还包括:
28、当从消息的生产者接收到所述目标消息时,初始化所述目标消息的已重试次数为零。
29、进一步地,所述重试时间的计算公式如下:
30、q=e(c)×f
31、其中,q表示重试时间,e(c)表示指数退避时间,f表示动态负载因子。
32、进一步地,所述方法还包括:
33、计算指数退避时间,退避时间的均匀分布,退避时间的数学期望是所有可能性的平均值,也就是说,在c次冲突之后,退避时隙数量在[0,1,...,n]中,其中n=2c-1,则退避时间的数学期望为以下表达式:
34、
35、式中,c表示冲突次数,即重试失败的次数。
36、进一步地,所述方法还包括:
37、根据当前应用ip、应用名称作为参数,调用负载监控系统;
38、由负载监控系统根据应用节点负载情况,实时计算获取当前的动态负载因子值,计算公式如下:
39、
40、其中,n表示节点数,pi表示第i个节点处理数,pmi表示第i个节点最大处理数,i大于零且小于等于n,f表示动态负载因子。
41、最后,本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现任一项所述的消息重试方法的步骤。
42、本发明提供的技术方案具有以下有益效果:
43、本发明通过消息队列的消息协商器从消息的生产者接收目标消息,记录所述目标消息的创建时间和已重试次数,并为所述目标消息配置过期时间、可重试的总重试次数和时隙时间,并将所述目标消息及其对应的所述创建时间、所述已重试次数、所述总重试次数及过期时间一并下发给对应的消费者,使得消费在消费所述目标消息时,根据所述已重试次数和所述总重试次数,判断所述目标消息是否是最后一次重试,若是,则在所述目标消息消费失败时,结束对所述目标消息的重试;或,在消费所述目标消息时,根据所述创建时间和所述过期时间,判断所述目标消息是否允许继续重试,若否,则在所述目标消息消费失败时,结束对所述目标消息的重试,实现了在mq的消息协商器下发消息时,增加消息的总重试次数、创建时间、过期时间及已重试次数,由消费者来干预消息失败时的重试策略,使得消费者能够做出对应的业务处理或提前结束重试等。使用动态指数退避算法加动态负载均衡算法,计算出最佳的延时重试时间,避免过多无效重试,提高重试成功率,降低资源消耗。
1.一种基于动态指数退避和动态负载均衡的消息重试方法,应用于消息队列的消息者端,其特征在于,包括以下步骤:
2.根据权利要1所述的消息重试方法,其特征在于,所述重试时间的计算公式如下:
3.根据权利要1所述的消息重试方法,其特征在于,所述方法还包括:
4.根据权利要求1所述的消息重试方法,其特征在于,所述方法还包括:
5.一种基于动态指数退避和动态负载均衡的消息重试方法,应用于消息队列的消息者协商器端,其特征在于,包括以下步骤:
6.根据权利要求5所述的消息重试方法,其特征在于,所述方法还包括:
7.根据权利要求5所述的消息重试方法,其特征在于,所述重试时间的计算公式如下:
8.根据权利要求5所述的消息重试方法,其特征在于,所述方法还包括:
9.根据权利要求5所述的消息重试方法,其特征在于,所述方法还包括:
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-9中任一项所述的消息重试方法的步骤。