异常消息处理方法及装置转让专利

申请号 : CN201811584453.8

文献号 : CN109739660B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李连泽刘畅胡鸿辉

申请人 : 新华三技术有限公司合肥分公司

摘要 :

本发明实施例涉及信息处理技术领域,提供一种异常消息处理方法及装置,所述方法包括:当待分发的消息加入的基础消息队列已满时,获取基础消息队列中的当前处理消息;依据第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列;将当前处理消息加入目标异常队列。本发明在消息队列头中的消息处理出现异常时,增加异常队列,将该处理异常的消息放入异常队列中以避免阻塞消息队列中其后的消息的分发。

权利要求 :

1.一种异常消息处理方法,其特征在于,应用于消息分发端,所述消息分发端预先存储至少一个基础消息队列,每个基础消息队列对应一个第一标志位,所述第一标志位用于表征与所述基础消息队列对应的异常队列的数量,所述方法包括:当待分发的消息加入的所述基础消息队列已满时,获取所述基础消息队列中的当前处理消息;

依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列;

将所述当前处理消息加入所述目标异常队列。

2.如权利要求1所述的异常消息处理方法,其特征在于,所述消息分发端预先存储与所述基础消息队列对应的异常队列的总数量;

所述依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列,具体包括:若所述第一标志位为0,则当所述第一标志位与异常队列的总数量一致时,新建一个消息队列,并将所述消息队列作为目标异常队列。

3.如权利要求1所述的异常消息处理方法,其特征在于,所述消息分发端包括至少一个异常队列;

所述依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列,具体包括:若所述第一标志位为0,则当所述第一标志位与异常队列的总数量不一致时,从所述至少一个异常队列中确定一个空闲队列,并将所述空闲队列作为目标异常队列。

4.如权利要求1所述的异常消息处理方法,其特征在于,所述当前处理消息包括目的IP地址,所述消息分发端包括至少一个异常队列,每一所述异常队列对应一个第二标志位,所述第二标志位用于表征所述异常队列对应的key值;

所述依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列,具体包括:对所述目的IP地址进行哈希运算,得到与所述目的IP地址对应的key值;

若所述第一标志位不为0,则当所述目的IP地址对应的key值与所述第二标志位一致时,将所述第二标志位对应的异常队列确定为目标异常队列。

5.如权利要求4所述的异常消息处理方法,其特征在于,所述依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列,具体还包括:当所述目的IP地址对应的key值与所述第二标志位不一致时,判断所述第一标志位与至少一个所述异常队列的总数量是否一致;

当所述第一标志位与至少一个所述异常队列的总数量一致时,新建一个消息队列,并将所述消息队列作为目标异常队列。

6.如权利要求5所述的异常消息处理方法,其特征在于,所述依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列,具体还包括:当所述第一标志位与至少一个所述异常队列的总数量不一致时,从至少一个所述异常队列中确定一个空闲队列,并将所述空闲队列作为目标异常队列。

7.如权利要求4所述的异常消息处理方法,其特征在于,所述将所述当前处理消息加入所述目标异常队列,具体包括:将所述基础消息队列中与所述当前处理消息的key值相同的目的消息和所述当前处理消息一并加入所述目标异常队列。

8.如权利要求4所述的异常消息处理方法,其特征在于,所述将所述当前处理消息加入所述目标异常队列,具体包括:若所述待分发的消息与所述当前处理消息具有相同的key值,则将所述待分发的消息与所述当前处理消息一并加入所述目标异常队列。

9.如权利要求2、3、5、6之一的所述异常消息处理方法,其特征在于,所述将所述当前处理消息加入所述目标异常队列之后,所述方法还包括:对所述第一标志位表征的与所述基础消息队列对应的异常队列的数量进行递增。

10.一种异常消息处理装置,其特征在于,应用于消息分发端,所述消息分发端预先存储至少一个基础消息队列,每个基础消息队列对应一个第一标志位,所述第一标志位用于表征与所述基础消息队列对应的异常队列的数量,所述装置包括:获取模块,用于当待分发的消息加入的所述基础消息队列已满时,获取所述基础消息队列中的当前处理消息;

确定模块,用于依据所述第一标志位,从所述基础消息队列对应的异常队列中,确定目标异常队列;

加入模块,用于将所述当前处理消息加入所述目标异常队列。

说明书 :

异常消息处理方法及装置

技术领域

[0001] 本发明涉及信息处理技术领域,具体而言,涉及一种异常消息处理方法及装置。

背景技术

[0002] 管理节点在管理多个网络节点时,通常需要将大量的管理消息分发至每个网络节点,现有技术通常采用基于目标地址散列算法的静态消息队列实现高效的消息分发,静态消息队列维护数量固定的消息队列,消息分发端首先通过对消息接收端的地址进行散列运算确定消息队列序号,然后将待分发的消息放入对应序号的消息队列中以待处理。
[0003] 由于采用散列算法,使得待分发的消息可以快速地进入消息队列等待处理,从而达到高效分发消息的目的,但是,消息队列中头部消息的消息处理出现异常,会影响该消息队列中头部消息后面的消息的分发。

发明内容

[0004] 有鉴于此,本发明提供了一种异常消息处理方法及装置,当消息队列头中的消息处理出现异常时,增加异常队列,将该处理异常的消息放入异常队列中以避免阻塞消息队列中头部消息后面的消息的分发。
[0005] 为了实现上述目的,本发明实施例采用的技术方案如下:
[0006] 第一方面,本发明提供了一种异常消息处理方法,应用于消息分发端,消息分发端预先存储至少一个基础消息队列,基础消息队列对应一个第一标志位,第一标志位用于表征与基础消息队列对应的异常队列的数量。该方法具体为:
[0007] 当待分发的消息加入的基础消息队列已满时,消息分发端获取基础消息队列中的当前处理消息;
[0008] 依据第一标志位,从基础消息队列对应的异常队列中,消息分发端确定目标异常队列;
[0009] 消息分发端将当前处理消息加入目标异常队列。
[0010] 结合第一方面,在第一种可能的实现方式中,消息分发端预先存储与基础消息队列对应的异常队列的总数量;
[0011] 其中,依据第一标志位,从基础消息队列对应的异常队列中,消息分发端确定目标异常队列的过程,具体为:
[0012] 若第一标志位为0,则当第一标志位与异常队列的总数量一致时,消息分发端新建一个消息队列,并将消息队列作为目标异常队列。
[0013] 结合第一方面,在第二种可能的实现方式中,消息分发端包括至少一个异常队列;
[0014] 其中,依据第一标志位,从基础消息队列对应的异常队列中,消息分发端确定目标异常队列的过程,具体为:
[0015] 若第一标志位为0,则当第一标志位与异常队列的总数量不一致时,消息分发端从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0016] 结合第一方面,在第三种可能的实现方式中,当前处理消息包括目的IP地址,消息分发端包括至少一个异常队列,每一所述异常队列对应一个第二标志位,第二标志位用于表征异常队列对应的key值;
[0017] 其中,依据第一标志位,从基础消息队列对应的异常队列中,消息分发端确定目标异常队列的过程,具体为:
[0018] 消息分发端对目的IP地址进行哈希运算,得到与目的IP地址对应的key值;
[0019] 若第一标志位不为0,则当目的IP地址对应的key值与第二标志位一致时,消息分发端将第二标志位对应的异常队列确定为目标异常队列。
[0020] 结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,该方法还包括:
[0021] 当目标IP地址对应的key值与第二标志位不一致时,消息分发端判断第一标志位与至少一个异常队列的总数量是否一致;
[0022] 当第一标志位与至少一个异常队列的总数量一致时,消息分发端新建一个消息队列,并将消息队列作为目标异常队列。
[0023] 结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,该方法还包括:
[0024] 当第一标志位与至少一个异常队列的总数量不一致时,消息分发端从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0025] 结合第一方面的第三种可能的实现方式,在第六种可能的实现方式中,其中,消息分发端将当前处理消息加入目标异常队列的过程,具体为:
[0026] 消息分发端将基础消息队列中与当前处理消息的key值相同的目的消息和当前处理消息一并加入目标异常队列。
[0027] 结合第一方面的第三种可能的实现方式,在第七种可能的实现方式中,其中,消息分发端将当前处理消息加入目标异常队列的过程,具体为:
[0028] 若待分发的消息与当前处理消息具有相同的key值,则消息分发端将待分发的消息与当前处理消息一并加入目标异常队列。
[0029] 结合第一方面的第一种、第二种、第四种、第五种可能的实现方式,在第八种可能的实现方式中,消息分发端执行将当前处理消息加入目标异常队列之后,该方法还包括:
[0030] 消息分发端对第一标志位表征的与基础消息队列对应的异常队列的数量进行递增。
[0031] 第二方面,本发明还提供了一种异常消息处理装置,应用于消息分发端,消息分发端预先存储至少一个基础消息队列,每个基础消息队列对应一个第一标志位,第一标志位用于表征与基础消息队列对应的异常队列的数量。该装置包括获取模块、确定模块及加入模块;
[0032] 获取模块,用于当待分发的消息加入的基础消息队列已满时,获取基础消息队列中的当前处理消息;
[0033] 确定模块,用于依据第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列;
[0034] 加入模块,用于将当前处理消息加入目标异常队列。
[0035] 结合第二方面,在第一种可能的实现方式中,该装置预先存储与基础消息队列对应的异常队列的总数量;
[0036] 其中,确定模块具体用于,若第一标志位为0,则当第一标志位与异常队列的总数量一致时,新建一个消息队列,并将消息队列作为目标异常队列。
[0037] 结合第二方面,在第二种可能的实现方式中,该装置包括至少一个异常队列;
[0038] 其中,确定模块具体用于,若第一标志位为0,则当第一标志位与异常队列的总数量不一致时,从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0039] 结合第二方面,在第三种可能的实现方式中,获取模块获取的当前处理消息包括目的IP地址,该装置包括至少一个异常队列,每一异常队列对应一个第二标志位,第二标志位用于表征所述异常队列对应的key值;
[0040] 其中,确定模块具体用于,对目的IP地址进行哈希运算,得到与目的IP地址对应的key值;
[0041] 若第一标志位不为0,则当目的IP地址对应的key值与第二标志位一致时,将第二标志位对应的异常队列确定为目标异常队列。
[0042] 结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,确定模块具体还用于:
[0043] 当目标IP地址对应的key值与第二标志位不一致时,判断第一标志位与至少一个异常队列的总数量是否一致;
[0044] 当第一标志位与所述至少一个异常队列的总数量一致时,新建一个消息队列,并将消息队列作为目标异常队列。
[0045] 结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,确定模块具体还用于:
[0046] 当第一标志位与至少一个异常队列的总数量不一致时,从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0047] 结合第二方面的第三种可能的实现方式,在第六种可能的实现方式中,其中,加入模块具体用于,将基础消息队列中与当前处理消息的key值相同的目的消息和当前处理消息一并加入目标异常队列。
[0048] 结合第二方面的第三种可能的实现方式,在第七种可能的实现方式中,其中,加入模块具体用于,若待分发的消息与当前处理消息具有相同的key值,则将待分发的消息与当前处理消息一并加入目标异常队列。
[0049] 结合第二方面的第一种、第二种、第四种、第五种可能的实现方式,在第八种可能的实现方式中,该装置还包括:
[0050] 递增模块,用于对第一标志位表征的与基础消息队列对应的异常队列的数量进行递增。
[0051] 相对现有技术,本发明实施例提供的一种异常消息处理方法及装置,首先,消息分发端基于用户请求生成待分发的消息,当将待分发的消息加入的基础消息队列已满时,获取该基础消息队列中的当前处理消息;然后,依据与基础消息队列对应的第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列;最后,将该当前处理消息加入目标异常队列,以消除该当前处理消息对处于同一个基础消息队列中其他消息分发的影响。与现有技术相比,本发明在当基础消息队列中头部消息的消息处理出现异常时,增加异常队列,将该处理异常的消息放入异常队列中以避免阻塞消息队列中头部消息后面的消息的分发。
[0052] 为使本发明的上述目的、特征和优点能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。

附图说明

[0053] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0054] 图1示出了本发明实施例提供的异常消息处理方法应用场景示意图。
[0055] 图2示出了本发明实施例提供的消息分发端的方框示意图。
[0056] 图3示出了本发明实施例提供的异常消息处理方法流程图。
[0057] 图4为图3示出的步骤S102的子步骤流程图。
[0058] 图5为图3示出的步骤S103的子步骤流程图。
[0059] 图6示出了本发明实施例提供的一种当前处理消息的处理过程示例图。
[0060] 图7示出了本发明实施例提供的另一种当前处理消息的处理过程示例图。
[0061] 图8示出了本发明实施例提供的另一种当前处理消息的处理过程示例图。
[0062] 图9为本发明实施例提供的基础消息队列不满时的处理流程图。
[0063] 图10示出了本发明实施例提供的异常消息处理装置的方框示意图。
[0064] 图标:10-消息分发端;101-存储器;102-通信接口;103-处理器;104-总线;20-消息接收端;200-异常消息处理装置;201-获取模块;202-确定模块;203-加入模块;204-递增模块。

具体实施方式

[0065] 下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0066] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0067] 请参照图1,图1示出了本发明实施例提供的异常消息处理方法应用场景示意图,图1中,消息分发端10与多个消息接收端20通信连接,消息分发端10基于用户请求生成待分发消息,将该待分发消息加入基础消息队列时,如果基础消息队列已满,则认为基础消息队列中的当前处理消息对应的消息接收端20出现异常,当前处理消息为异常消息,依据与基础消息队列对应的第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列,将当前处理消息加入至目标异常队列中,以避免阻塞同一个消息队列中当前处理消息后面的消息的分发。
[0068] 请参照图2,图2示出了本发明实施例提供的消息分发端10的方框示意图。消息分发端10可以是,但不限于,主机、虚拟机、实体服务器、实体服务器上的虚拟机等能提供与所述服务器或者虚拟机有相同功能的实体或者虚拟的服务端。消息分发端10的操作系统可以是,但不限于,Windows系统、Linux系统等。所述消息分发端10包括存储器101、通信接口102、处理器103和总线104,所述存储器101、通信接口102和处理器103通过总线104连接,处理器103用于执行存储器101中存储的可执行模块,例如计算机程序。
[0069] 其中,存储器101可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口102(可以是有线或者无线)实现该消息分发端10与至少一个其他消息接收端20的通信连接。
[0070] 总线104可以是ISA总线、PCI总线或EISA总线等。图2中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0071] 其中,存储器101用于存储程序,例如图10所示的异常消息处理装置200。该异常消息处理装置200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器101中或固化在所述消息分发端10的操作系统(operating system,OS)中的软件功能模块。所述处理器103在接收到执行指令后,执行所述程序以实现本发明上述实施例揭示的异常消息处理方法。
[0072] 第一实施例
[0073] 请参照图3,图3示出了本发明实施例提供的异常消息处理方法流程图。所述方法包括以下步骤:
[0074] 步骤S101,当待分发的消息加入的基础消息队列已满时,获取基础消息队列中的当前处理消息。
[0075] 在本发明实施例中,待分发的消息可以是消息分发端10基于用户请求生成的,也可以是消息分发端10接收其他设备而转发的消息,或者是基于其他设备发送的请求生成的。基础消息队列可以包括多个消息接收端20的消息,每个消息中包括消息内容及目的IP地址,其中,目的IP地址为该消息对应的消息接收端20的IP地址。
[0076] 通常地,待分发的消息加入至基础消息队列中的尾部,消息分发端10在处理基础消息队列中的消息时,从基础消息队列的头部的消息开始处理,当然,也可以不按照此顺序进行,此处不做限定。当前处理消息是存在于基础消息队列中正在处理且尚未处理完成的消息,一旦该消息处理完成,就会从基础消息队列中移除,继续进行下一个消息的处理。
[0077] 基础消息队列均有一个预设队列长度,即基础消息队列中可以加入的消息的最大数量,当基础消息队列加入的消息的数量达到预设队列长度时,则认为基础消息队列已满,此时,消息分发端10判定正在处理消息的消息接收端20出现异常,导致正在处理消息无法得以及时分发出去,最终使得后续待处理消息不断加入基础消息队列,导致基础消息队列满。
[0078] 在本发明实施例中,当消息接收端20的数量较少时,基础消息队列可以只有一个,所有消息接收端20的消息均由同一个基础消息队列进行管理,当消息接收端20的数量较多时,为了实现消息分发的并发分发,可以使用多个基础消息队列,每个基础消息队列管理若干个消息接收端20的消息。
[0079] 作为一种实施方式,多个基础消息队列可以以数组的形式组织,即数组中的每一个元素为一个基础消息队列。根据待分发的消息确定其所属的基础消息队列的方法可以是:将待分发的消息中的目的IP地址进行哈希运算,得到对应的key值,将待分发的消息中的key值与基础消息队列的总个数取模,得到待分发消息所述的基础消息队列的数组下标序号。
[0080] 例如,基础消息队列为4个,对应的数组分别为Slot[0][0]、Slot[1][0]、Slot[2][0]、Slot[3][0],若待分发消息中的key值为12,则对应的数组下标序号为:12%5=2,则该待分发消息应该放入基础消息队列Slot[2][0]中。同样地,若待分发消息中的key值为15,则对应的数组下标序号为:15%5=0,则该待分发消息应该放入基础消息队列Slot[0][0]中。
[0081] 在本发明实施例中,采用数组的方式管理基础消息队列,可以快速地依据消息中的key值通过取模直接确定出对应的基础消息队列,从而提高了消息处理速度。
[0082] 步骤S102,依据第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列。
[0083] 在本发明实施例中,每个基础消息队列对应一个第一标志位,第一标志位用于表征与基础消息队列对应的异常队列的数量。在本发明实施例中,可以将一个异常队列的含义引申为:异常队列表征为对应一个异常的消息接收端20。
[0084] 其中,异常的消息接收端20为接收消息时出现异常的消息接收端20,消息分发端10向消息接收端20发送消息后,在预设时间内未收到对应的反馈信息,此时,消息分发端10判定对应的消息接收端20出现异常。消息接收端20出现异常包括、但不限于是消息接收端
20掉电、消息接收端20故障、或者消息接收端20的网络出现异常等情况。
[0085] 第一标志位在初始化时初始化为0,当待分发的消息加入的基础消息队列已满时,判定基础消息队列中当前处理消息对应的消息接收端20出现异常,此时会将当前处理消息加入目标异常队列,同时将第一标志位递增。
[0086] 目标异常队列为专门存放异常消息的队列,异常消息为待发送至消息接收端20但已出现异常的消息。可以理解的是,每一个目标异常队列对应一个异常的消息接收端20。
[0087] 例如,当前第一标志位为0,T1时刻,当前处理消息对应的是1#消息接收端20。当判定1#消息接收端20出现异常时,将T1时刻的当前处理消息加入至1#消息接收端20对应的异常队列中;同时将第一标志位进行递增。此时,第一标志位更新为1。
[0088] T2时刻,当前处理消息对应的是2#消息接收端20。判定2#消息接收端20出现异常,则将T2时刻的当前处理消息加入至2#消息接收端20对应的异常队列中;同时将第一标志位进行递增。此时,第一标志位更新为2。
[0089] T3时刻,当前处理消息对应的是2#消息接收端20。由于2#消息接收端20已经出现异常,则将T3时刻的当前处理消息加入至2#消息接收端20对应的异常队列中。此时,由于没有新增的异常的消息接收端20。因此,第一标志位不会递增。
[0090] 在本发明实施例中,为了确定目标异常队列,步骤S102还可以包括以下子步骤,请参照图4,步骤S102包括以下子步骤:
[0091] 子步骤S1021,判断第一标志位是否为0。
[0092] 在本发明实施例中,第一标志位为0意味着当前对应的基础消息队列没有异常队列,即基础消息队列对应的消息接收端20中没有出现异常。当第一标志位为0时,执行子步骤S1022,判断第一标志位是否与基础消息队列对应的异常队列的总数量一致。当第一标志位与异常队列的总数量一致时,执行子步骤S1023。当第一标志位不与异常队列的总数量一致,执行子步骤S1024。
[0093] 子步骤S1022,判断第一标志位与异常队列的总数量是否一致。
[0094] 在本发明实施例中,异常队列的状态包括正在使用状态和空闲状态,此处的异常队列的总数量为这两种状态的异常队列的总数。
[0095] 子步骤S1023,新建一个消息队列,并将消息队列作为目标异常队列。
[0096] 在本发明实施例中,第一标志位为0,异常队列的总数量也为0,意味着对应的基础消息队列的消息接收端20中从来没有出现过异常,也没有创建过异常队列。此时,为了将当前处理消息加入异常队列,实现异常的消息接收端20的隔离,需要新建一个消息队列,并将消息队列作为目标异常队列,再将当前处理消息加入至该目标异常队列中。
[0097] 子步骤S1024,从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0098] 在本发明实施例中,当异常队列中的消息全部处理完毕时,该异常队列变成空闲队列,空闲队列不会被释放,以便于下次有消息接收端20出现异常时可以直接使用,此时,由于无需再重新创建队列,因而提高了消息处理的效率。
[0099] 由于异常队列变为空闲时,会将对应的第二标志位置为0,因此,可以通过异常队列的第二标志位是否为0确定该异常队列是否为空闲队列,当第二标志位为0,认为对应的异常队列为空闲队列,当空闲队列为多个时,可以按照预设规则从多个空闲队列中选出一个空闲队列作为目标异常队列。例如,可以将首先找到的空闲队列作为目标异常队列,也可以将最后找到的空闲队列作为目标异常队列,具体预设规则,本发明实施例不做限定。
[0100] 在本发明实施例中,每个异常队列均对应一个第二标志位,第二标志位用于表征对应的异常队列对应的key值,异常队列中的消息中的目的IP地址都是一样的,即每个异常队列对应一个异常的消息接收端20,故,异常队列的key值是通过异常队列对应的消息接收端20的IP地址进行哈希运算得到的。
[0101] 若第一标志位不为0,则表示基础消息队列存在对应的异常队列,此时,还需要执行子步骤S1025,即依据当前处理消息中的目的IP地址得到与目的IP地址对应的key值,然后执行子步骤S1026,即判断当前处理消息的key值与异常队列的第二标志位是否一致,若一致,则将与当前处理消息的key值一致的异常队列作为目标异常队列;若不一致,还需要进一步判断第一标志位与至少一个异常队列的总数量是否一致,若当前处理消息的key值与第二标志位一致,则执行子步骤S1027,最终确定目标异常队列。
[0102] 子步骤S1025,依据目的IP地址得到对应的key值。
[0103] 子步骤S1026,判断目的IP地址对应的key值是否与第二标志位一致。
[0104] 子步骤S1027,将第二标志位对应的异常队列确定为目标异常队列。
[0105] 在本发明实施例中,目的IP地址对应的key值与第二标志位一致,意味着已经存在与当前处理消息的消息接收端20对应的异常队列,因此,当前处理消息可以直接加入对应的异常队列。
[0106] 本发明实施例中,第一标志位表征的与基础消息队列对应的异常队列为正在使用的异常队列,即非空的异常队列,与基础消息队列对应的异常队列的总数量包括正在使用的异常队列和空闲的异常队列,当异常队列中的消息处理完毕时,此时异常队列不会被删除,即异常队列的总数量不会减少,但是,第一标志位会递减。
[0107] 例如,第一标志位为2,异常队列的总数量为2,分别为1#异常队列和2#异常队列、对应的第二标志位分别为123、124,当1#异常队列中的消息处理完毕后,1#异常队列对应的第二标志位置为0,且第一标志位会递减,变为1,异常队列的总数量仍然为2。
[0108] 在本发明实施例中,目的IP地址对应的key值与第二标志位不一致时,此时执行子步骤S1022,判断第一标志位与至少一个异常队列的总数量是否一致,当第一标志位与至少一个异常队列的总数量一致时,执行子步骤S1023,即新建一个消息队列,并将消息队列作为目标异常队列。当第一标志位与至少一个异常队列的总数量不一致时,执行子步骤S1024,即从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0109] 步骤S103,将当前处理消息加入目标异常队列。
[0110] 在本发明实施例中,将处于基础队列头部的当前处理消息加入目标异常队列使得当前处理消息之后的消息得以及时处理,提高了消息分发的效率。
[0111] 但是,当基础消息队列中还存在与当前处理消息具有相同异常消息接收端20的目的消息时、或者待加入的消息与当前处理消息具有相同的消息接收端20,为了避免该目的消息或者待加入的消息影响基础消息队列中其他消息的处理,进一步提高消息分发的效率,达到完全屏蔽异常的消息接收端20的目的,请参照图5,本发明实施例还包括子步骤S1031和子步骤S1032。
[0112] 在本发明实施例中,为了将基础消息队列中与当前处理消息具有相同key值的目的消息从基础消息队列中移至目标异常队列,本发明实施例还包括子步骤S1031。
[0113] 子步骤S1031,将基础消息队列中与当前处理消息的key值相同的消息和当前处理消息一并加入所述目标异常队列。
[0114] 在本发明实施例中,若待加入的消息与当前处理消息具有相同的key值,为了将待分发的消息加入至目标异常队列,因此,本发明实施例还包括子步骤S1032。
[0115] 子步骤S1032,若待分发的消息与当前处理消息具有相同的key值,则将待分发的消息与当前处理消息一并加入目标异常队列。
[0116] 在本发明实施例中,当基础消息队列对应每一个正在使用的异常队列的key值,0均非当前处理消息的目的IP地址的key值时,需要对第一标志位进行递增,因此,本发明实施例还包括步骤S104。
[0117] 步骤S104,对第一标志位表征的与基础消息队列对应的异常队列的数量进行递增。
[0118] 在本发明实施例中,对第一标志位进行递增的情况有两种:(1)目标异常队列为新增队列;(2)目标异常队列是从空闲队列中确定的。
[0119] 为了简化描述,下文中的图6、图7和图8中直接描述每一个消息包括key值和消息内容,其中,key值是根据消息中的目的IP地址进行哈希运算得到的,而实际场景中,消息中包括的是目的IP地址,而非对应的key值,图6、图7和图8中只是示例性的简化描述。
[0120] 请参照图6,图6示出了本发明实施例提供的一种当前处理消息的处理过程示例图,消息处理前,待分发消息的key值为20,Value1为其消息内容,基础消息队列Slot[0][0]中存在3个消息,其中,当前处理消息的key值为20,消息内容为Value4,基础消息队列的长度为3,异常队列的总数量为0,即不存在异常队列。
[0121] 待分发消息加入基础消息队列Slot[0][0]中时,基础消息队列已满,第一标志位为0,且与异常队列的总数量一致,则创建异常队列Slot[0][1],并将Slot[0][1]作为目标异常队列,然后将基础消息队列Slot[0][0]中的当前处理消息加入至目标异常队列Slot[0][1],将第一标志位递增为1,将第二标志位设置为当前处理消息的key值20,由于待分发消息的key值也为20,因此,将待分发消息也加入至目标异常队列Slot[0][1]。
[0122] 请参照图7,图7示出了本发明实施例提供的另一种当前处理消息的处理过程示例图,消息处理前,待分发消息的key值为40,Value1为其消息内容,基础消息队列Slot[0][0]中存在3个消息,其中,当前处理消息的key值为30,消息内容为Value4,基础消息队列的长度为3,异常队列的总数量为1,存在一个异常队列Slot[0][1],其第二标志位为20,其中包括2个消息。
[0123] 待分发消息加入基础消息队列Slot[0][0]中时,基础消息队列已满,第一标志位不为0,当前处理消息的key值30与异常队列Slot[0][1]的第二标志位20不一致,则创建队列Slot[0][2],并将Slot[0][2]作为目标异常队列,然后将基础消息队列Slot[0][0]中的当前处理消息加入至目标异常队列Slot[0][2],将第一标志位递增为2,将目标异常队列Slot[0][2]的第二标志位设置为当前处理消息的key值30,由于待分发消息的key值为40,与当前处理消息的key值不一致,因此,将待分发消息加入至基础消息队列Slot[0][0]。
[0124] 请参照图8,图8示出了本发明实施例提供的另一种当前处理消息的处理过程示例图,消息处理前,待分发消息的key值为40,Value1为其消息内容,基础消息队列Slot[0][0]中存在3个消息,其中,当前处理消息的key值为30,消息内容为Value4,基础消息队列的长度为3,异常队列的总数量为1,存在一个异常队列Slot[0][1],其第二标志位为0,即该异常队列为空闲队列。
[0125] 待分发消息加入基础消息队列Slot[0][0]中时,基础消息队列已满,第一标志位为0,第一标志位0与异常队列的总数量1不一致,从异常队列中找到一个空闲队列Slot[0][1]作为目标异常队列,然后将基础消息队列Slot[0][0]中的当前处理消息加入至目标异常队列Slot[0][1],将第一标志位递增为1,将目标异常队列Slot[0][1]的第二标志位设置为当前处理消息的key值30,由于待分发消息的key值为40,与当前处理消息的key值不一致,因此,将待分发消息加入至基础消息队列Slot[0][0]。
[0126] 需要说明的是,当异常的消息接收端20从异常恢复至正常时,对应异常队列中的消息很快会被处理完,当异常队列中的消息被处理完后,需要将异常队列的第二标志位置为0,且将对应的第一标志位递减。
[0127] 还需要说明的是,当待分发消息加入基础消息队列中,若基础消息队列不满,处理过程参照图9,图9为本发明实施例提供的基础消息队列不满时的处理流程图,首先,判断第一标志位是否为0,若第一标志位为0,则将待分发消息直接加入基础消息队列即可,若第一标志位不为0,则判断待分发消息的key值是否与异常队列的第二标志位一致,若待分发消息的key值与异常队列的第二标志位一致时,将待分发消息加入至与待分发消息的key值一致的异常队列中,若待分发消息的key值与异常队列的第二标志位不一致时,将待分发消息直接加入基础消息队列。
[0128] 在本发明实施例中,当消息接收端20出现异常时,增加异常队列,将异常的消息接收端20的消息放入异常队列中以对异常的消息接收端20进行屏蔽,与现有技术相比,具有以下有益效果:
[0129] 第一,在基础消息队列头中的当前处理消息出现异常时,将该处理异常的消息放入异常队列,避免阻塞该基础消息队列中其后的其他消息的分发。
[0130] 第二,由于对与异常处理消息具有相同消息接收端20的待分发消息、及与异常处理消息具有相同消息接收端20的基础消息队列中的目的消息均进行筛选,将其放入异常队列,实现了对异常的消息接收端20及时、全面地屏蔽,有效地控制了异常的消息接收端20对其他基础消息队列中正常的消息接收端20的消息分发的影响。
[0131] 第二,通过对每一个基础消息队列增加第一标志位,对每一个异常队列增加第二标志位,优化了异常消息处理流程中的判断处理过程,提高了异常消息处理的效率。
[0132] 第二实施例
[0133] 请参照图10,图10示出了本发明实施例提供的异常消息处理装置200的方框示意图。异常消息处理装置200应用于消息分发端10,其包括获取模块201;确定模块202;加入模块203;递增模块204。
[0134] 获取模块201,用于当待分发的消息加入的基础消息队列已满时,获取基础消息队列中的当前处理消息。
[0135] 在本发明实施例中,获取模块201用于执行步骤S101。
[0136] 确定模块202,用于依据第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列。
[0137] 在本发明实施例中,确定模块202用于执行步骤S102及其子步骤S1021-S1027。
[0138] 加入模块203,用于将当前处理消息加入目标异常队列。
[0139] 在本发明实施例中,加入模块203用于执行步骤S103及其子步骤S1031-S1032。
[0140] 递增模块204,用于对第一标志位表征的与基础消息队列对应的异常队列的数量进行递增。
[0141] 在本发明实施例中,递增模块204用于执行步骤S104。
[0142] 进一步地,该装置预先存储与基础消息队列对应的异常队列的总数量;
[0143] 其中,确定模块202具体用于,若第一标志位为0,则当第一标志位与异常队列的总数量一致时,新建一个消息队列,并将消息队列作为目标异常队列。
[0144] 进一步地,该装置包括至少一个异常队列;
[0145] 其中,确定模块202具体用于,若第一标志位为0,则当第一标志位与异常队列的总数量不一致时,从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0146] 进一步地,获取模块201获取的当前处理消息包括目的IP地址,该装置包括至少一个异常队列,每一异常队列对应一个第二标志位,第二标志位用于表征所述异常队列对应的key值;
[0147] 其中,确定模块202具体用于,对目的IP地址进行哈希运算,得到与目的IP地址对应的key值;
[0148] 若第一标志位不为0,则当目的IP地址对应的key值与第二标志位一致时,将第二标志位对应的异常队列确定为目标异常队列。
[0149] 进一步地,确定模块202具体还用于,当目标IP地址对应的key值与第二标志位不一致时,判断第一标志位与至少一个异常队列的总数量是否一致;当第一标志位与所述至少一个异常队列的总数量一致时,新建一个消息队列,并将消息队列作为目标异常队列。
[0150] 进一步地,确定模块202具体还用于,当第一标志位与至少一个异常队列的总数量不一致时,从至少一个异常队列中确定一个空闲队列,并将空闲队列作为目标异常队列。
[0151] 进一步地,加入模块203具体用于,将基础消息队列中与当前处理消息的key值相同的目的消息和当前处理消息一并加入目标异常队列。
[0152] 进一步地,加入模块203具体用于,若待分发的消息与当前处理消息具有相同的key值,则将待分发的消息与当前处理消息一并加入目标异常队列。
[0153] 综上所述,本发明提供的一种异常消息处理方法及装置,所述方法包括:当待分发的消息加入的基础消息队列已满时,获取基础消息队列中的当前处理消息;依据第一标志位,从基础消息队列对应的异常队列中,确定目标异常队列;将当前处理消息加入目标异常队列。本发明在在消息队列头中的消息处理出现异常时,增加异常队列,将该处理异常的消息放入异常队列中以避免阻塞消息队列中其后的消息的分发。
[0154] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。
[0155] 也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0156] 另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0157] 所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0158] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0159] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。