1.本发明涉及消息处理技术领域,具体涉及一种基于延迟时间的分布式消息处理方法、装置和系统。
背景技术:2.互联网公司都会有这样一些需求场景,某条数据需要在一个特定的延迟时间后处理,延时处理该数据的消息即为延迟消息,延迟消息也叫定时消息,是指需要在一段时间后被消费的消息。
3.现有技术中,对于延时消息的利用,仅仅是延时消息发出后,选择固定的时间点进行消息消费,导致消息延时消费的灵活度较低,延时消息消费的实用性较低。
技术实现要素:4.有鉴于此,本发明的目的在于提供一种基于延迟时间的分布式消息处理方法、装置和系统,以解决现有技术中的对于延时消息的利用,仅仅是延时消息发出后,选择固定的时间点进行消息消费,导致消息延时消费的灵活度较低,延时消息消费的实用性较低问题。
5.为实现以上目的,本发明采用如下技术方案:
6.一种基于延迟时间的分布式消息处理方法,包括:
7.获取待延迟消费数据和所述待延迟消费数据对应的延迟时长;所述待延迟消费数据和所述延迟时长均携带有所述待延迟消费数据被发送的初始时间片;
8.将所述延迟时长存储到配置中心,将所述待延迟消费数据存储到分布式存储集群;
9.根据当前时间和所述配置中心存储的所有延迟时长,确定每个所述初始时间片对应的索引时间片;
10.按照预设检测周期,对所述分布式存储集群进行检测,将得到的每个与所述索引时间片相匹配的所述待延迟消费数据均作为待消费数据;
11.将所有所述待消费数据进行立即消费。
12.进一步地,上述基于延迟时间的分布式消息处理方法中,所述将所述待消费数据进行立即消费,包括:
13.获取预先存储到所述配置中心的执行线程数;
14.利用根据所述执行线程数设置的执行线程,对所述待消费数据进行消费。
15.进一步地,上述基于延迟时间的分布式消息处理方法,还包括:
16.接收所述待消费数据的消费反馈;
17.若所述待消费数据的消费反馈表示消费未成功,将所述待消费数据的消费次数加一,并判断所述消费次数是否超出预先存储到所述配置中心的预设重试次数;
18.若所述消费次数超出所述预设重试次数,则将所述待消费数据从所述分布式存储集群转移到预先设置的死信队列中,以便对所述待消费数据进行人工干预处理;
19.若所述消费次数未超出所述预设重试次数,则重新将所述待消费数据存储到所述分布式存储集群中,以便对所述待消费数据进行重新消费。
20.进一步地,上述基于延迟时间的分布式消息处理方法中,所述接收所述待消费数据的消费反馈之后,还包括:
21.若所述待消费数据的消息反馈表示消费成功,则将所述待消费数据从所述分布式存储集群移除。
22.进一步地,上述基于延迟时间的分布式消息处理方法,还包括:
23.将所述消息反馈表示消费成功的所述待消费数据作为已消费数据;
24.将所有所述已消费数据存储到已消费信息队列。
25.本发明还提供了一种基于延迟时间的分布式消息处理装置,包括:
26.获取模块,用于获取待延迟消费数据和所述待延迟消费数据对应的延迟时长;所述待延迟消费数据和所述延迟时长均携带有所述待延迟消费数据被发送的初始时间片;
27.存储模块,用于将所述延迟时长存储到配置中心,将所述待延迟消费数据存储到分布式存储集群;
28.确定模块,用于根据当前时间和所述配置中心存储的所有延迟时长,确定每个所述初始时间片对应的索引时间片;
29.检测模块,用于按照预设检测周期,对所述分布式存储集群进行检测,将得到的每个与所述索引时间片相匹配的所述待延迟消费数据均作为待消费数据;
30.消费模块,用于将所有所述待消费数据进行立即消费。
31.进一步地,上述基于延迟时间的分布式消息处理装置中,所述消费模块包括:线程获取单元和线程消费单元;
32.所述线程获取单元,用于获取预先存储到所述配置中心的执行线程数;
33.所述线程消费单元,用于利用根据所述执行线程数设置的执行线程,对所述待消费数据进行消费。
34.进一步地,上述基于延迟时间的分布式消息处理装置,还包括:接收模块、判断模块和转移模块;
35.所述接收模块,用于接收所述待消费数据的消费反馈;
36.所述判断模块,用于若所述待消费数据的消费反馈表示消费未成功,将所述待消费数据的消费次数加一,并判断所述消费次数是否超出预先存储到所述配置中心的预设重试次数;
37.所述转移模块,用于若所述消费次数超出所述预设重试次数,则将所述待消费数据从所述分布式存储集群转移到预先设置的死信队列中,以便对所述待消费数据进行人工干预处理;若所述消费次数未超出所述预设重试次数,则重新将所述待消费数据存储到所述分布式存储集群中,以便对所述待消费数据进行重新消费。
38.进一步地,上述基于延迟时间的分布式消息处理装置中,所述转移模块,还用于若所述待消费数据的消息反馈表示消费成功,则将所述待消费数据从所述分布式存储集群移除。
39.本发明还提供了一种基于延迟时间的分布式消息处理系统,包括:处理器以及与所述处理器相连的存储器;
40.所述存储器用于存储计算机程序,所述计算机程序至少用于执行上述基于延迟时间的分布式消息处理方法;
41.所述处理器用于调用并执行所述计算机程序。
42.一种基于延迟时间的分布式消息处理方法、装置和系统,方法包括:获取待延迟消费数据和待延迟消费数据对应的延迟时长;待延迟消费数据和延迟时长均携带有待延迟消费数据被发送的初始时间片;将延迟时长存储到配置中心,将待延迟消费数据存储到分布式存储集群;根据当前时间和配置中心存储的所有延迟时长,确定每个初始时间片对应的索引时间片;按照预设检测周期,对分布式存储集群进行检测,将得到的每个与索引时间片相匹配的待延迟消费数据均作为待消费数据;将所有待消费数据进行立即消费。采用本发明的技术方案,用户可以预先设置待延迟消费数据对应的延迟时长,再将延迟时长存储到配置中心,并且利用时间片作为索引读取数据,相比于直接通过配置中心固定配置延迟时长,能够实现延迟时长的动态设置,提高消息延时消费的灵活度和延时消息消费的实用性。
43.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
44.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
45.图1是本发明的基于延迟时间的分布式消息处理方法一种实施例提供的流程图;
46.图2是本发明的基于延迟时间的分布式消息处理装置一种实施例提供的结构示意图;
47.图3是本发明的基于延迟时间的分布式消息处理系统一种实施例提供的结构示意图。
具体实施方式
48.为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
49.图1是本发明的基于延迟时间的分布式消息处理方法一种实施例提供的流程图,如图1所示,本实施例的基于延迟时间的分布式消息处理方法具体包括如下步骤:
50.s101、获取待延迟消费数据和待延迟消费数据对应的延迟时长。
51.本实施例中,用户可以自主设置待延迟消费数据对应的延迟时长,分布式延迟消费的服务器可以获取待延迟消费数据以及该待延迟消费数据对应的延迟时长。其中,待延迟消费数据以及延迟时长均携带有该待延迟消费数据被发送的初始时间片,并且该初始时间片为待延迟消费数据被发送的时间,可精确到秒级别,例如,初始时间片可以为2020
‑
12
‑
11 10:10:03。另外,待延迟消费数据以及延迟时长还可以携带该待延迟消费数据的业务
id。
52.s102、将延迟时长存储到配置中心,将待延迟消费数据存储到分布式存储集群。
53.服务器获取到待延迟消费数据和延迟时长后,需要将延迟时长存储到配置中心,将待延迟消费数据存储到分布式存储集群。其中,待延迟消费数据是以列表的形式存储,每一个待延迟消费数据均是列表中的一个元素。分布式存储集群为有序数据集。
54.s103、根据当前时间和配置中心存储的所有延迟时长,确定每个待延迟消费数据携带的初始时间片对应的索引时间片。
55.服务器可以根据当前时间和配置中心中存储的所有的延迟时长,计算每个待延迟消费数据携带的初始时间片对应的索引时间片。利用当前时间减去待延迟消费数据对应的延迟时长,便能计算出该待延迟消费数据携带的初始时间片对应的索引时间片。
56.s104、按照预设检测周期,对分布式存储集群进行检测,将得到的每个与索引时间片相匹配的待延迟消费数据均作为待消费数据。
57.服务器需要按照预设检测周期对存储到分布式存储集群中的所有待延迟消费数据进行检测,也就是利用每个初始时间片对应的索引时间片与该初始时间片进行匹配,如果索引时间片与其对应的初始时间片相同,则将该初始时间片对应的待延迟消费数据作为待消费数据。其中,预设检测周期为预先设置并存储在配置中心中的数据。
58.s105、将所有待消费数据进行立即消费。
59.通过定时检测后,确定的所有待消费数据均需要进行立即消费,从而实现精准的延迟消费。其中,具体的执行步骤如下所述:
60.第一,获取预先存储到配置中心的执行线程数。
61.用户可以对执行线程数进行动态设置,设置完成后,执行线程数会存储到配置中心内。在进行数据消费时,首先需要从配置中心中获取预先设置的执行线程数。
62.第二,利用根据执行线程数设置的执行线程,对待消费数据进行消费。
63.获取到执行线程数后,服务器会设置相应数量的执行线程。并利用执行线程对所有的消费数据进行消费。其中,执行线程也为子线程,本实施例中主线程仅仅用于检测是否有待消费数据,而对待消费数据进行消费的执行任务则是分派给各个执行线程(子线程),这样可以确保主线程不堵塞,提高数据消费效率。
64.本实施例的基于延迟时间的分布式消息处理方法,获取待延迟消费数据和待延迟消费数据对应的延迟时长;待延迟消费数据和延迟时长均携带有待延迟消费数据被发送的初始时间片;将延迟时长存储到配置中心,将待延迟消费数据存储到分布式存储集群;根据当前时间和配置中心存储的所有延迟时长,确定每个初始时间片对应的索引时间片;按照预设检测周期,对分布式存储集群进行检测,将得到的每个与索引时间片相匹配的待延迟消费数据均作为待消费数据;将所有待消费数据进行立即消费。采用本实施例的技术方案,用户可以预先设置待延迟消费数据对应的延迟时长,再将延迟时长存储到配置中心,并且利用时间片作为索引读取数据,相比于直接通过配置中心固定配置延迟时长,能够实现延迟时长的动态设置,提高消息延时消费的灵活度和延时消息消费的实用性。
65.进一步地,本实施例的基于延迟时间的分布式消息处理方法,还包括如下步骤:
66.第一,接收待消费数据的消费反馈。
67.每个待消费数据进行消费后,均会向服务器进行消费反馈。其中,消费反馈可以表
示消费成功,也可以表示消费未成功。
68.第二,若待消费数据的消费反馈表示消费未成功,将待消费数据的消费次数加一,并判断消费次数是否超出预先存储到配置中心的预设重试次数。
69.如果待消费数据的消费反馈表示消费未成功,那么便将待消费数据的消费次数加一。另外,用户可以对预设重试次数进行动态设置,设置完成后,预设重试次数会存储到配置中心内。服务器需要判断该待消费数据的消费次数是否超过预设重试次数,以便确定是否还可以对该待消费数据的消费进行重试。
70.第三,若消费次数超出预设重试次数,则将待消费数据从分布式存储集群转移到预先设置的死信队列中,以便对待消费数据进行人工干预处理。
71.如果判断出待消费数据的消费次数超出了预设重试次数,那么便将该待消费数据冲分布式存储集群中移除,并将其转移到预先设置的死信队列中,这样便可以对死信队列中的待消费数据进行人工干预处理,确保不会丢失任何消息。
72.第四,若消费次数未超出预设重试次数,则重新将待消费数据存储到分布式存储集群中,以便对待消费数据进行重新消费。
73.如果判断出待消费数据的消费次数并未超出预设重试次数,那么便可以将原始的待消费数据从分布式存储集群中移除,重新将该待消费数据存储到分布式存储集群中,以便对该待消费数据进行重新消费,这样便会保证之前未完成消费的数据不会丢失。
74.进一步地,本实施例的基于延迟时间的分布式消息处理方法,还包括:
75.若待消费数据的消息反馈表示消费成功,则将待消费数据从分布式存储集群移除,从而确保数据不重复消费。其中,本实施例中从分布式存储集群中移除待消费数据可以采用redis的原子操作。
76.进一步地,本实施例的基于延迟时间的分布式消息处理方法,还包括如下步骤:
77.第一,将消息反馈表示消费成功的待消费数据作为已消费数据。
78.如果待消费数据的消息反馈表示消费成功,那么便将该待消费数据作为已消费数据。
79.第二,将所有已消费数据存储到已消费信息队列,从而解决分布式存储集群整体宕机后补消费的问题。
80.为了更全面,对应于本发明实施例提供的基于延迟时间的分布式消息处理方法,本申请还提供了基于延迟时间的分布式消息处理装置。
81.图2是本发明的基于延迟时间的分布式消息处理装置一种实施例提供的结构示意图,如图2所示,本实施例的基于延迟时间的分布式消息处理装置包括:获取模块11、存储模块12、确定模块13、检测模块14和消费模块15。
82.获取模块11,用于获取待延迟消费数据和待延迟消费数据对应的延迟时长;待延迟消费数据和延迟时长均携带有待延迟消费数据被发送的初始时间片;
83.存储模块12,用于将延迟时长存储到配置中心,将待延迟消费数据存储到分布式存储集群;
84.确定模块13,用于根据当前时间和配置中心存储的所有延迟时长,确定每个初始时间片对应的索引时间片;
85.检测模块14,用于按照预设检测周期,对分布式存储集群进行检测,将得到的每个
与索引时间片相匹配的待延迟消费数据均作为待消费数据;
86.消费模块15,用于将所有待消费数据进行立即消费。
87.本实施例的基于延迟时间的分布式消息处理装置,用户可以预先设置待延迟消费数据对应的延迟时长,再将延迟时长存储到配置中心,并且利用时间片作为索引读取数据,相比于直接通过配置中心固定配置延迟时长,能够实现延迟时长的动态设置,提高消息延时消费的灵活度和延时消息消费的实用性。
88.进一步地,本实施例的基于延迟时间的分布式消息处理装置中,消费模块15包括:线程获取单元和线程消费单元。
89.线程获取单元,用于获取预先存储到配置中心的执行线程数;
90.线程消费单元,用于利用根据执行线程数设置的执行线程,对待消费数据进行消费。
91.进一步地,本实施例的基于延迟时间的分布式消息处理装置,还包括:接收模块、判断模块和转移模块。
92.接收模块,用于接收待消费数据的消费反馈;
93.判断模块,用于若待消费数据的消费反馈表示消费未成功,将待消费数据的消费次数加一,并判断消费次数是否超出预先存储到配置中心的预设重试次数;
94.转移模块,用于若消费次数超出预设重试次数,则将待消费数据从分布式存储集群转移到预先设置的死信队列中,以便对待消费数据进行人工干预处理;若消费次数未超出预设重试次数,则重新将待消费数据存储到分布式存储集群中,以便对待消费数据进行重新消费。
95.进一步地,本实施例的基于延迟时间的分布式消息处理装置中,转移模块,还用于若待消费数据的消息反馈表示消费成功,则将待消费数据从分布式存储集群移除。
96.进一步地,本实施例的基于延迟时间的分布式消息处理装置,还包括:存储模块,用于将消息反馈表示消费成功的待消费数据作为已消费数据;将所有已消费数据存储到已消费信息队列。
97.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
98.图3是本发明的基于延迟时间的分布式消息处理系统一种实施例提供的结构示意图,如图3所示,本实施例的基于延迟时间的分布式消息处理系统包括处理器21以及与处理器21相连的存储器22;存储器22用于存储计算机程序,所述计算机程序至少用于执行上述实施例的基于延迟时间的分布式消息处理方法;处理器21用于调用并执行所述计算机程序。
99.本实施例的基于延迟时间的分布式消息处理系统,用户可以预先设置待延迟消费数据对应的延迟时长,再将延迟时长存储到配置中心,并且利用时间片作为索引读取数据,相比于直接通过配置中心固定配置延迟时长,能够实现延迟时长的动态设置,提高消息延时消费的灵活度和延时消息消费的实用性。
100.本发明还提供了一种存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现以上的基于延迟时间的分布式消息处理方法的各个步骤。
101.可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中
未详细说明的内容可以参见其他实施例中相同或相似的内容。
102.需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
103.流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
104.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
105.本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
106.此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
107.上述提到的存储介质可以是只读存储器,磁盘或光盘等。
108.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
109.尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。