一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种消息重发送方法和装置与流程

2022-03-01 18:16:29 来源:中国专利 TAG:


1.本技术属于移动通信技术领域,具体涉及一种消息重发送方法和装置。


背景技术:

2.广播推送是互联网中常用的消息模式,由用户(客户端)向消息推送服务进行相关消息的订阅,随后消息推送服务对从消息队列中取出的消息和用户的订阅条件进行匹配,将匹配到的消息发送给特定的用户。但在消息发送过程中,由于网络环境或消息损坏等因素的影响,可能造成消息发送失败。在此情况下通常采用重发机制,即当消息发送不成功时可以进行多次发送尝试,从而解决消息发送不成功的问题。
3.现有技术方案中的消息重发机制实现原理简单,一般是若消息发送失败,则将发送失败的消息存入一个重试队列中,随后消息推送服务定时的调用重发队列中的消息向用户发送,直至消息发送成功后,将该条消息从缓冲队列中删除,然后继续调用下一条消息。
4.然而现有的消息重发方法,消息推送服务将重试队列中的消息发送给用户时,没有区分广播消息的重要等级,所有消息全部采用相同的模式进行重发,这就容易造成重要的消息无法及时发送,降低了用户体验。同时,由于消息损坏等原因的影响,可能造成某一条消息永远无法发送给特定用户,此时若采用目前的重试方法,消息推送服务将不断的尝试发送该消息,从而造成系统资源的浪费。


技术实现要素:

5.本技术的目的在于提供一种消息重发送方法和装置,动态反馈调节每条消息的重发策略,保证重要消息及时发送,并且可合理分配资源。
6.为实现上述目的,本技术所采取的技术方案为:
7.一种消息重发送方法,每条消息均携带有预设的重要等级,所述消息重发送方法,包括:
8.根据消息的重要等级、重试次数、延时时间计算消息的发送等级;
9.根据计算的消息的发送等级,将消息插入重试消息树;
10.定时取出重试消息树中发送等级最高的消息进行重发送;
11.根据所述发送等级最高的消息的重发送情况,对重试消息树进行调整。
12.以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
13.作为优选,所述重试次数阈值根据消息的重要等级对应设置,其中,重试次数阈值与消息的重要等级正相关。
14.作为优选,所述根据消息的重要等级、重试次数、延时时间计算消息的发送等级之前,还包括:
15.判断消息的重试次数是否超过重试次数阈值,若超过重试次数阈值,则将该消息
存放至死信队列;否则根据消息的重要等级、重试次数、延时时间计算消息的发送等级。
16.作为优选,所述根据消息的重要等级、重试次数、延时时间计算消息的发送等级,包括:
17.发送等级=(重要等级*a1)-(重试次数*a2)-(延时时间*a3)
18.或:
19.发送等级=a1*重要等级/(重试次数*a2 延时时间*a3)
20.式中,a1、a2、a3为权重系数,并且a1 a2 a3=1,a1》a2》a3。
21.作为优选,所述根据所述等级最高的消息的重发送情况,对重试消息树进行调整,包括:
22.若所述等级最高的消息重发送失败,则更新该消息的重试次数和延时时间,判断重试次数未超过重试次数阈值后,重新计算发送等级并插入重试消息树中。
23.本技术还提供一种消息重发送装置,每条消息均携带有预设的重要等级,所述消息重发送装置,包括:
24.等级计算模块,用于根据消息的重要等级、重试次数、延时时间计算消息的发送等级;
25.消息写入模块,用于根据计算的消息的发送等级,将消息插入重试消息树;
26.重发送模块,用于定时取出重试消息树中发送等级最高的消息进行重发送;
27.动态调节模块,用于根据所述发送等级最高的消息的重发送情况,对重试消息树进行调整。
28.作为优选,所述重试次数阈值根据消息的重要等级对应设置,其中,重试次数阈值与消息的重要等级正相关。
29.作为优选,所述根据消息的重要等级、重试次数、延时时间计算消息的发送等级之前,所述等级计算模块还执行如下操作:
30.判断消息的重试次数是否超过重试次数阈值,若超过重试次数阈值,则将该消息存放至死信队列;否则根据消息的重要等级、重试次数、延时时间计算消息的发送等级。
31.作为优选,所述等级计算模块,根据消息的重要等级、重试次数、延时时间计算消息的发送等级,执行如下操作:
32.发送等级=(重要等级*a1)-(重试次数*a2)-(延时时间*a3)
33.或:
34.发送等级=a1*重要等级/(重试次数*a2 延时时间*a3)
35.式中,a1、a2、a3为权重系数,并且a1 a2 a3=1,a1》a2》a3。
36.作为优选,所述动态调节模块,根据所述等级最高的消息的重发送情况,对重试消息树进行调整,执行如下操作:
37.若所述等级最高的消息重发送失败,则更新该消息的重试次数和延时时间,判断重试次数未超过重试次数阈值后,重新计算发送等级并插入重试消息树中。
38.本技术提供的消息重发送方法和装置,综合考虑每条消息的重要等级、重试次数、延时时间,动态计算每条消息的发送等级,根据发送等级动态反馈调节每条消息的重发策略,优先选取发送等级最高的消息进行重发送,避免发送等级较低的消息长期占用发送资源,保证重要消息及时发送,以提高用户体验,同时也提高了系统资源分配的合理性。
附图说明
39.图1为本技术的广播推送的一种实施例流程图;
40.图2为本技术的消息重发送方法的流程图;
41.图3为本技术实施例1中一种广播推送的工作流程图。
具体实施方式
42.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
43.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中在本技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本技术。
44.其中一个实施例中,提供一种消息重发送方法,用于动态调节每条发送失败的消息的重发策略。本技术的消息重发送方法针对各消息模式均具有较优的重发效果,能够保证消息及时发送并且不浪费发送资源。
45.本实施例提及的消息模式可以是工作队列模式、通配符模式、路由模式、简单模式等。由于广播推送是较为常用的消息模式,因此本实施例以广播推送为例对本技术消息重发送方法进行详述。
46.如图1所示,通常广播推送过程中涉及后台业务模块、推送服务以及客户端(用户),具体地,广播推送的工作流程为:
47.1)首先客户端向推送服务订阅自身所需要的消息类型,随后与推送服务建立长连接。
48.2)消息队列中存储着后台业务模块发送的广播消息,推送服务从消息队列中取出广播消息,与用户订阅的规则进行匹配,将消息发送给匹配成功的用户。
49.3)若消息发送失败,则推送服务需要进行消息重发送操作。
50.现有技术中针对消息重发送操作通常利用重发队列和死信队列完成,但由于基于重发队列的消息重发送时效性低,用户体验不佳,因此本实施例提供一种消息重发送方法如图2所示,具体包括以下步骤:
51.s1、根据消息的重要等级、重试次数、延时时间计算消息的发送等级。
52.对于消息队列中的每条消息,均携带有预设的重要等级,通常每条消息预设的重要等级可根据用户要求进行设置,以满足用户对消息的需求,当然也可以是根据消息类型进行统一设置。容易理解的是,消息的重要等级如何设置不作为本技术的改进重点,可依据现有规则进行实现。
53.消息队列中的消息在发送过程中,由于各种原因会出现消息发送失败的现象。造成消息发送失败的原因很多,例如消息自身损坏,或者因为网络丢包造成消息发送失败等等。在消息发送失败后,很多系统中会有消息重发机制,对发送失败的消息进行重发,使得消息能够顺利发送到接收端,避免消息发送失败的情况。
54.本实施例针对每一条需要进行重发送的消息,首先判断该消息的重试次数,根据
重试次数确定是否需要对该消息进行重发送,以避免损坏的消息长期占有发送资源。本实施例考虑到消息第一次发送失败意味着消息已经发送过一次,因此设置消息第一次发送失败时,该消息的重试次数就记为1,而后消息每发送失败一次,则重试次数加1。
55.容易理解的是,重试次数的累计方式可以根据实际需求进行调节,例如还可以是设置消息第一次发送失败时,该消息的重试次数记为0,而后消息每发送失败一次,则重试次数加1,不考虑消息第一次发送,仅以重发送次数进行累计。
56.在判断消息的重试次数时,根据重试次数阈值进行衡量,重试次数阈值限定了每条消息的重发送次数。针对每条消息可设置统一的重试次数阈值,也可以根据每条消息设置不同的重试次数阈值。
57.本实施例中为了保证重要消息的发送成功率,根据每条消息的重要等级对应设置每条消息的重试次数阈值。容易理解的是,在根据重要等级设置重试次数阈值时,可以使重试次数阈值与消息的重要等级正相关,即消息的重要等级越高,则重试次数阈值越大,以保证重要的消息具有足够的重发送次数;可以使重试次数阈值与消息的重要等级负相关,即消息的重要等级越高,重试次数阈值越小,可以尽快锁定重要的消息是否能够发送成功,以便于及时采取补救措施。
58.本实施例中设置重试次数阈值与消息的重要等级正相关。例如,消息的重要等级分为1~10级,其中10级表示消息的重要等级最高,相应的,1级表示消息的重要等级最低。可设置重要等级为10级的消息的重试次数阈值为10n(如1000次),重要等级为1级的重试次数阈值为n次(如100次)。
59.在一种实施方式中,计算消息的发送等级之前,需要先判断消息的重试次数是否超过重试次数阈值,若超过重试次数阈值,则将该消息存放至死信队列;否则再根据消息的重要等级、重试次数、延时时间计算消息的发送等级。
60.设置对应的重试次数阈值后,判断发送失败的消息的重试次数是否超过重试次数阈值,若该消息的重试次数超过重试次数阈值,则认为该消息已损坏,消息发送失败与环境网络无关,因此将该消息存放至死信队列。放入死信队列的消息则不再尝试重发送,以避免占用发送资源。并且可以进一步设置死信队列的清空时间,定时清除死信队列中的消息,以节省存储空间。
61.若判断后重试次数未超过重试次数阈值,则需要计算该消息的发送等级,本实施例中提供一种优选的计算方式如下:
62.发送等级=(重要等级*a1)-(重试次数*a2)-(延时时间*a3)
63.式中,a1、a2、a3为权重系数,并且a1 a2 a3=1,a1》a2》a3。
64.本实施例中的发送等级综合考虑了消息的重要等级、重试次数、延时时间,保证重要等级高的消息能够及时被发送,并且设置权重系数以适应更多的应用环境。例如本实施例中提供一种取值方案为a1=0.7、a2=0.2、a3=0.1。
65.每条消息在重发送以前均根据上述发送等级计算公式确定当前的发送等级,以实现动态反馈调节每条消息的重发策略。需要说明的是,发送等级主要用于确保重要且损坏的概率低的消息能够优先被重发送,因此在保证优先原则的前提下,对发送等级的计算公式还可以做更多形变。
66.例如另一实施例中,提供的发送等级的计算公式可以是:
67.发送等级=a1*重要等级/(重试次数*a2 延时时间*a3)
68.式中,a1、a2、a3为权重系数,并且a1 a2 a3=1,a1》a2》a3。
69.当重试次数越多,表示该消息损坏的概率越大,本实施例中发送等级仍确保重要且损坏的概率低的消息能够优先被重发送,并且发送等级不存在负值,可避免正负数值的比较。
70.因此,在根据消息的重要等级、重试次数、延时时间计算发送等级时,具有较大的可选性,甚至可以根据实际需求更改优先原则,例如更改优先原则为确保重试次数较少的消息优先被重发送,则可以增加权重系数a2,满足a2》a1》a3或者满足a2》a3》a1等;又如更改优先原则为确保延时时间久的消息被优先发送,以避免消息延迟过久,则可以增加权重系数a3,满足a3》a1》a2或者满足a3》a2》a1等。
71.上述实施方式中,延时时间根据重试次数的增加而递增,根据本技术中优选的发送等级计算方式而言,可以使最新的消息能够及时发送,体现消息发送的时效性。
72.本实施例中提供一种优选的延时时间计算方式如下:
73.延时时间=(当前时间的毫秒值-消息首次发送时间的毫秒值)/1000/3600。
74.其中的当前时间的毫秒值应理解为读取的系统当前时间转化成的毫秒值,消息首次发送时间的毫秒值应理解为该消息首次被发送时记录的时间转化成的毫秒值。
75.根据延时时间计算公式可以看出,若重试次数越多,则当前时间与消息首次发送时间之间的差值越大,因此延时时间越大,从而动态调节该消息的发送等级降低,优先将首次发送时间较新的消息进行重发送,以保证消息发送具有较高的时效性。
76.容易理解的是,延时时间还可以是由其他方式确定,例如直接设置为重试次数的相应倍数,或者与重试次数呈正比关系。
77.s2、根据计算的消息的发送等级,将消息插入重试消息树。
78.本实施例中的重试消息树应理解为一种树状的消息存储结构,是一种重要的非线性数据结构。将消息按照发送等级插入重试消息树时,可以是按照发送等级降序排序,也可以是按照发送等级升序排序,或者采用例如二叉树等左右子树一大一小的排列方法,甚至是自定义的排序方法。即在保证消息重发送时能够取出发送等级最高的消息进行重发送的前提下,不对具体的消息排序方法做严格限制。
79.由于对一棵树进行查询/新增/删除等动作所花的时间与树的高度成比例,并不与树的容量成比例。因此为了节省查找时间,本实施例的重试消息树采用平衡二叉树(balanced binary tree),平衡二叉树具有以下性质:其为一棵空树或其左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
80.本实施例中的平衡二叉树可以是红黑树、avl树、替罪羊树、treap、伸展树等。其中优选使用avl树,以实现平衡调节的前提下具有最快的调节速度。
81.需要说明的是,本技术重点在于利用平衡二叉树进行消息存储,对于消息插入或取出平衡二叉树的过程,以及平衡二叉树旋转调节平衡的过程不作为本技术的改进重点,这里就不再进行赘述。
82.将消息插入重试消息树时,可以将消息的全部内容插入重试消息树中,以便于消息使用;也可以将消息对应的地址插入重试消息树中,以提高消息插入和取出重试消息树时的速度。
83.对于平衡二叉树的插入动作而言,若平衡二叉树中已存在与待插入结点相同的结点时,则将出现无法插入的情况。本实施例为了避免这种情况下造成数据丢失,为每一消息设置唯一的标识,当两个消息的发送等级相同时,则按照唯一标识的大小执行插入动作,从而保证所有发送失败的消息均能够插入平衡二叉树中。
84.每一消息的唯一的标识可以是生成的唯一的数值,或者是发送的消息的条数,也可以是消息的哈希值等,这里不做严格限制。
85.本技术利用平衡二叉树实现快速方便查找,但是在消息发送量不大或者对发送消息的效率要求不高,或者其他情况下,还可以是直接将消息放入数组或数据块中,按照发送等级采用从大到小或从大到小的排序方式插入或者取出数据进行重发送。
86.s3、定时取出重试消息树中发送等级最高的消息进行重发送。
87.在执行重发送时,查找重试消息树找到发送等级最高的消息进行重发送。对于本实施例采用的平衡二叉树而言,每个结点的左子树和右子树均按照特定原则进行分布,例如分布原则可以是:若左子树不空,则左子树上所有结点的值均小于其根结点的值;若右子树不空,则右子树上所有结点的值均大于其根结点的值;还可以是:若左子树不空,则左子树上所有结点的值均大于其根结点的值;若右子树不空,则右子树上所有结点的值均小于其根结点的值。
88.因此在取出重试消息树中发送等级最高的消息时,只需取出左子树或右子树中最底层的叶结点的消息即可,显著提高了消息取出的效率。
89.并且本实施例中在取出消息后,即删除该消息所在结点,即当消息从重试消息树中取出之后,该消息树中即不存在被取出的消息,以便于实现对该消息的追踪,避免该消息同时存在于多处导致混淆。
90.s4、根据所述发送等级最高的消息的重发送情况,对重试消息树进行调整。
91.对于重发送的消息而言,若等级最高的消息重发送失败,则更新该消息的重试次数和延时时间,判断重试次数未超过重试次数阈值后,重新计算发送等级并插入重试消息树中。从而实现对每条消息进行发送等级的动态计算,实现动态反馈调节每条消息的重发策略,保证重要消息的及时发送,并且可避免资源浪费。
92.若判断重试次数超过重试次数阈值后,则将该消息存放至死信队列,不再为该消息占用资源。若等级最高的消息重发送成功,则该消息不用重新插入重试消息树中。
93.关于消息发送成功后是否返回对应反馈,以及反馈的返回对象等不作为本技术的改进重点,根据消息发送实际逻辑对应设置即可。
94.本技术的消息重发方法,综合考虑消息的重要等级和重试次数,若重试次数相同,则发送重要等级较高的消息,优先保证重要的消息及时快速的到达客户端;若重要等级相同,则优先发送重试次数较少的消息,避免不断地重发同一条消息,合理分配系统的发送资源。同时,若某一重要等级较高的消息已损坏或客户端无法识别该消息等原因无法发送该消息,在尝试多次重发后依然无法发送成功,则不断降低该消息的发送等级。
95.实施例1
96.以下通过实施例具体说明结合本技术的消息重发送方法的广播推送的工作流程。如图3所示,具体工作流程为:
97.1)首先客户端(用户)向推送服务订阅自身所需要的消息类型,随后与推送服务建
立长连接。
98.2)消息队列中存储着后台业务模块发送的广播消息,推送服务从消息队列中取出广播消息,与用户订阅消息进行匹配,将消息发送给匹配成功的用户。
99.3)判断消息是否发送成功,若消息发送成功,则结束该消息的发送;若消息发送失败,则将消息的重试次数加1。
100.4)判断消息的重试次数是否超过阈值,若消息的重试次数超过阈值,则将消息放入死信队列,并设置预设时间定时清除死信消息。
101.5)若消息的重试次数未超过阈值,则计算消息的发送等级,得到消息的发送等级=(消息的重要等级*a1)-(消息的重试次数*a2)-(消息的延时时间*a3),或发送等级=a1*重要等级/(重试次数*a2 延时时间*a3)。
102.6)按照计算的发送等级将消息插入avl树中。
103.7)定时任务从avl树中取出发送等级最高的消息,进行发送,并重新执行步骤3。
104.本实施例的广播推送方法针对每条消息动态调整重发送策略,即避免发送资源的占用浪费,又显著提高用户体验。
105.在另一个实施例中,本技术还提供一种消息重发送装置,其中每条消息均携带有预设的重要等级,本实施例的消息重发送装置,包括:
106.等级计算模块,用于根据消息的重要等级、重试次数、延时时间计算消息的发送等级;
107.消息写入模块,用于根据计算的消息的发送等级,将消息插入重试消息树;
108.重发送模块,用于定时取出重试消息树中发送等级最高的消息进行重发送;
109.动态调节模块,用于根据所述发送等级最高的消息的重发送情况,对重试消息树进行调整。
110.关于本技术消息重发送装置的具体限定可以参见上文中对于消息重发送方法的限定,在此不再赘述。上述消息重发送装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
111.与上述消息重发送方法对应,本实施例的一种实现方式中,所述重试次数阈值根据消息的重要等级对应设置,其中,重试次数阈值与消息的重要等级正相关。
112.本实施例的一种实现方式中,所述根据消息的重要等级、重试次数、延时时间计算消息的发送等级之前,所述等级计算模块还执行如下操作:
113.判断消息的重试次数是否超过重试次数阈值,若超过重试次数阈值,则将该消息存放至死信队列;否则根据消息的重要等级、重试次数、延时时间计算消息的发送等级。
114.在一个实施例中,所述等级计算模块,根据消息的重要等级、重试次数、延时时间计算消息的发送等级,执行如下操作:
115.发送等级=(重要等级*a1)-(重试次数*a2)-(延时时间*a3)
116.或:
117.发送等级=a1*重要等级/(重试次数*a2 延时时间*a3)
118.式中,a1、a2、a3为权重系数,并且a1 a2 a3=1,a1》a2》a3。
119.在一个实施例中,所述动态调节模块,根据所述等级最高的消息的重发送情况,对重试消息树进行调整,执行如下操作:
120.若所述等级最高的消息重发送失败,则更新该消息的重试次数和延时时间,判断重试次数未超过重试次数阈值后,重新计算发送等级并插入重试消息树中。
121.本技术提供的消息重发送装置可执行本技术实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
122.应该理解的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
123.以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
124.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献