基于人机对话的消息处理方法及装置转让专利

申请号 : CN202111576056.8

文献号 : CN113961379B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李帅超曾文佳陈新月宋成业冯梦盈梁鹏斌李航韩亚昕

申请人 : 零犀(北京)科技有限公司

摘要 :

本申请提供一种基于人机对话的消息处理方法及装置,涉及计算机技术领域。该方法通过对目标消息进行限速消费条件和/或延时消费条件的判断,从而可以对目标消息进行限速和/或延时处理,即可以对消息进行区分处理,本申请的基于人机对话的消息处理方法可以适应不同类型的消息在处理需求上的差异性。

权利要求 :

1.一种基于人机对话的消息处理方法,其特征在于,所述方法包括:获取消息生产者生产的目标消息;

判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费条件,或者,所述预设条件包括限速消费条件和延时消费条件;

若是,则将所述目标消息加入对应的目标消息队列中;

在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理;

其中,所述预设条件包括限速消费条件,所述判断所述目标消息是否满足预设条件,包括:

获取所述目标消息的消息类型;

若所述消息类型为设定限速消息类型,则确定所述目标消息满足限速消费条件;

其中,设置有多个限速队列,每个限速队列对应一个限速时间,所述将所述目标消息加入对应的目标消息队列中,包括:获取所述目标消息对应的目标限速时间;

确定与所述目标限速时间匹配的目标限速队列;

将所述目标消息加入到所述目标限速队列中,其中,所述目标限速队列为所述目标消息队列。

2.根据权利要求1所述的方法,其特征在于,每个限速队列配置有锁,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:判断所述目标限速队列的锁是否处于解锁状态;

若是,则确定所述目标限速队列中的消息达到消费时间。

3.根据权利要求2所述的方法,其特征在于,所述判断所述目标限速队列的锁是否处于解锁状态,包括:

通过服务器监测各个限速队列的锁是否处于解锁状态;

所述通过消息消费者对所述目标消息队列中的消息进行消费处理,包括:若通过所述服务器监测到所述目标限速队列的锁处于解锁状态时,通过所述服务器向所述消息消费者发送提示信息,所述提示信息用于指示所述消息消费者对所述目标限速队列中的消息进行消费处理。

4.根据权利要求1所述的方法,其特征在于,所述预设条件包括延时消费条件,所述判断所述目标消息是否满足预设条件,包括:判断所述目标消息携带的消费时间戳是否晚于当前时间;

若是,则确定所述目标消息满足所述延时消费条件。

5.根据权利要求4所述的方法,其特征在于,所述目标消息队列采用哈希表实现,所述将所述目标消息加入对应的目标消息队列中,包括:将所述目标消息加入到对应的哈希表中。

6.根据权利要求5所述的方法,其特征在于,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:

定时从所述哈希表中读取消费时间戳为当前时间的当前消费消息,其中,若所述目标消息的消费时间戳为当前时间,则所述当前消费消息包括所述目标消息;

将所述消费时间戳为当前时间的当前消费消息确定为达到消费时间的消息。

7.根据权利要求6所述的方法,其特征在于,所述通过消息消费者对所述目标消息队列中的消息进行消费处理,包括:将所述目标消息加入到对应的目标实时消费队列中;

通过消息消费者对所述目标实时消费队列中的消息进行消费处理。

8.根据权利要求7所述的方法,其特征在于,设置有多个实时消费队列,每个实时消费队列用于存储的消息类型不同,所述将所述目标消息加入到对应的目标实时消费队列中,包括:

获取所述目标消息的消息类型;

确定与所述消息类型匹配的目标实时消费队列;

将所述目标消息加入到所述目标实时消费队列中。

9.一种基于人机对话的消息处理装置,其特征在于,所述装置包括:消息获取模块,用于获取消息生产者生产的目标消息;

判断模块,用于判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费条件,或者,所述预设条件包括限速消费条件和延时消费条件;

消息存储模块,用于若所述目标消息满足预设条件,则将所述目标消息加入对应的目标消息队列中;

处理模块,用于在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理;

其中,所述预设条件包括限速消费条件,所述判断模块,具体用于获取所述目标消息的消息类型;若所述消息类型为设定限速消息类型,则确定所述目标消息满足限速消费条件;

其中,设置有多个限速队列,每个限速队列对应一个限速时间,所述消息存储模块,具体用于获取所述目标消息对应的目标限速时间;确定与所述目标限速时间匹配的目标限速队列;将所述目标消息加入到所述目标限速队列中,其中,所述目标限速队列为所述目标消息队列。

10.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1‑8任一所述的方法。

11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时运行如权利要求1‑8任一所述的方法。

说明书 :

基于人机对话的消息处理方法及装置

技术领域

[0001] 本申请涉及计算机技术领域,具体而言,涉及一种基于人机对话的消息处理方法及装置。

背景技术

[0002] 消息队列是分布式系统中重要的中间件,用于实现消息的分发处理。消息队列基于队列模型建立,包括生产者和消费者,生产者用于生成消息,消息存放到消息队列中,消
费者用于从消息队列中取消息进行处理,通过消息的生产与消费实现了对消息的快速处
理。
[0003] 但是目前利用消息队列对消息进行处理的方式是对所有消息不加区分地处理,无法适应不同类型的消息在处理需求上的差异性。

发明内容

[0004] 本申请实施例的目的在于提供一种基于人机对话的消息处理方法及装置,用以改善现有技术中的消息处理方式无法适应不同类型的消息在处理需求上的差异性。
[0005] 第一方面,本申请实施例提供了一种基于人机对话的消息处理方法,所述方法包括:
[0006] 获取消息生产者生产的目标消息;
[0007] 判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费条件和/或延时消费条件;
[0008] 若是,则将所述目标消息加入对应的目标消息队列中;
[0009] 在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理。
[0010] 在上述实现过程中,通过对目标消息进行限速消费条件和/或延时消费条件的判断,从而可以对目标消息进行限速和/或延时处理,即可以对消息进行区分处理,本申请的
基于人机对话的消息处理方法可以适应不同类型的消息在处理需求上的差异性。
[0011] 可选地,所述预设条件包括限速消费条件,所述判断所述目标消息是否满足预设条件,包括:
[0012] 获取所述目标消息的消息类型;
[0013] 若所述消息类型为设定限速消息类型,则确定所述目标消息满足限速消费条件。这样可以通过消息类型筛选出需要限速消费的消息。
[0014] 可选地,设置有多个限速队列,每个限速队列对应一个限速时间,所述将所述目标消息加入对应的目标消息队列中,包括:
[0015] 获取所述目标消息对应的目标限速时间;
[0016] 确定与所述目标限速时间匹配的目标限速队列;
[0017] 将所述目标消息加入到所述目标限速队列中,其中,所述目标限速队列为所述目标消息队列。
[0018] 在上述实现过程中,通过匹配限速时间将目标消息加入到匹配的目标限速队列,以使得不同的消息可以采用不同的限速时间进行处理。
[0019] 可选地,每个限速队列配置有锁,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0020] 判断所述目标限速队列的锁是否处于解锁状态;
[0021] 若是,则确定所述目标限速队列中的消息达到消费时间。
[0022] 在上述实现过程中,通过为限速队列配置锁来达到限速的目的,便于操作,实现简单。
[0023] 可选地,所述判断所述目标限速队列的锁是否处于解锁状态,包括:
[0024] 通过服务器监测各个限速队列的锁是否处于解锁状态;
[0025] 所述通过消息消费者对所述目标消息队列中的消息进行消费处理,包括:
[0026] 若通过所述服务器监测到所述目标限速队列的锁处于解锁状态时,通过所述服务器向所述消息消费者发送提示信息,所述提示信息用于指示所述消息消费者对所述目标限
速队列中的消息进行消费处理。
[0027] 在上述实现过程中,通过服务器来监测限速队列的状态,可以避免消息消费者自己监测耗费较多资源的问题,从而可以提高消息消费者对消息的处理效率。
[0028] 可选地,所述预设条件包括延时消费条件,所述判断所述目标消息是否满足预设条件,包括:
[0029] 判断所述目标消息携带的消费时间戳是否晚于当前时间;
[0030] 若是,则确定所述目标消息满足所述延时消费条件。这样可以通过消费时间筛选出需要延时消费的消息。
[0031] 可选地,所述目标消息队列采用哈希表实现,所述将所述目标消息加入对应的目标消息队列中,包括:
[0032] 将所述目标消息加入到对应的哈希表中。采用哈希表来存储需要延时的消息,可以提高延时消息的查找效率。
[0033] 可选地,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0034] 定时从所述哈希表中读取消费时间戳为当前时间的当前消费消息,其中,若所述目标消息的消费时间戳为当前时间,则所述当前消费消息包括所述目标消息;
[0035] 将所述消费时间戳为当前时间的当前消费消息确定为达到消费时间的消息。
[0036] 在上述实现过程中,通过定时从哈希表中获取当前消费消息进行处理,可以及时获取当前需要处理的延时消息,从而可提高对延时消息处理的效率。
[0037] 可选地,所述通过消息消费者对所述目标消息队列中的消息进行消费处理,包括:
[0038] 将所述目标消息加入到对应的目标实时消费队列中;
[0039] 通过消息消费者对所述目标实时消费队列中的消息进行消费处理。这样可以使得消息消费者及时对延时处理的消息进行处理。
[0040] 可选地,设置有多个实时消费队列,每个实时消费队列用于存储的消息类型不同,所述将所述目标消息加入到对应的目标实时消费队列中,包括:
[0041] 获取所述目标消息的消息类型;
[0042] 确定与所述消息类型匹配的目标实时消费队列;
[0043] 将所述目标消息加入到所述目标实时消费队列中。
[0044] 在上述实现过程中,将不同消息类型的消息存入不同的实时消费队列,以便于对消息进行分类处理。
[0045] 第二方面,本申请实施例提供了一种基于人机对话的消息处理装置,所述装置包括:
[0046] 消息获取模块,用于获取消息生产者生产的目标消息;
[0047] 判断模块,用于判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费条件和/或延时消费条件;
[0048] 消息存储模块,用于若所述目标消息满足预设条件,则将所述目标消息加入对应的目标消息队列中;
[0049] 处理模块,用于在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理。
[0050] 可选地,所述预设条件包括限速消费条件,所述判断模块,用于获取所述目标消息的消息类型;若所述消息类型为设定限速消息类型,则确定所述目标消息满足限速消费条
件。
[0051] 可选地,设置有多个限速队列,每个限速队列对应一个限速时间,所述判断模块,用于获取所述目标消息对应的目标限速时间;确定与所述目标限速时间匹配的目标限速队
列;将所述目标消息加入到所述目标限速队列中,其中,所述目标限速队列为所述目标消息
队列。
[0052] 可选地,每个限速队列配置有锁,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0053] 判断所述目标限速队列的锁是否处于解锁状态;
[0054] 若是,则确定所述目标限速队列中的消息达到消费时间。
[0055] 可选地,所述判断所述目标限速队列的锁是否处于解锁状态,包括:
[0056] 通过服务器监测各个限速队列的锁是否处于解锁状态;
[0057] 所述处理模块,用于若通过所述服务器监测到所述目标限速队列的锁处于解锁状态时,通过所述服务器向所述消息消费者发送提示信息,所述提示信息用于指示所述消息
消费者对所述目标限速队列中的消息进行消费处理。
[0058] 可选地,所述预设条件包括延时消费条件,所述判断模块,用于判断所述目标消息携带的消费时间戳是否晚于当前时间;若是,则确定所述目标消息满足所述延时消费条件。
[0059] 可选地,所述目标消息队列采用哈希表实现,所述判断模块,用于将所述目标消息加入到对应的哈希表中。
[0060] 可选地,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0061] 定时从所述哈希表中读取消费时间戳为当前时间的当前消费消息,其中,若所述目标消息的消费时间戳为当前时间,则所述当前消费消息包括所述目标消息;
[0062] 将所述消费时间戳为当前时间的当前消费消息确定为达到消费时间的消息。
[0063] 可选地,所述处理模块,用于将所述目标消息加入到对应的目标实时消费队列中;通过消息消费者对所述目标实时消费队列中的消息进行消费处理。
[0064] 可选地,设置有多个实时消费队列,每个实时消费队列用于存储的消息类型不同,所述处理模块,用于获取所述目标消息的消息类型;确定与所述消息类型匹配的目标实时
消费队列;将所述目标消息加入到所述目标实时消费队列中。
[0065] 第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第
一方面提供的所述方法中的步骤。
[0066] 第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。
[0067] 本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说
明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

[0068] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看
作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他相关的附图。
[0069] 图1为本申请实施例提供的一种基于人机对话的消息处理方法的流程图;
[0070] 图2为本申请实施例提供的一种消息队列的处理示意图;
[0071] 图3为本申请实施例提供的一种针对延时的消息进行处理的示意图;
[0072] 图4为本申请实施例提供的一种基于人机对话的消息处理装置的结构框图;
[0073] 图5为本申请实施例提供的一种用于执行基于人机对话的消息处理方法的电子设备的结构示意图。

具体实施方式

[0074] 下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0075] 需要说明的是,本发明实施例中的术语“系统”和“网络”可被互换使用。“多个”是指两个或两个以上,鉴于此,本发明实施例中也可以将“多个”理解为“至少两个”。“和/或”,
描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,
同时存在A和B,单独存在B这三种情况。另外,字符“/”,如无特殊说明,一般表示前后关联对
象是一种“或”的关系。
[0076] 本申请实施例提供一种基于人机对话的消息处理方法,该方法通过接收消息生产者生成的目标消息,判断目标消息是否满足预设条件,预设条件包括限速消费条件或延时
消费条件,如果满足,则将目标消息加入到对应的目标消息队列中,在目标消息队列中的消
息达到消费时间时,通过消息消费者对目标消息队列中的消息进行消费处理,从而可以对
目标消息进行限速和/或延时处理,即可以对消息进行区分处理,本申请的基于人机对话的
消息处理方法可以适应不同类型的消息在处理需求上的差异性,适用于更多应用场景。
[0077] 请参照图1,图1为本申请实施例提供的一种基于人机对话的消息处理方法的流程图,该方法包括如下步骤:
[0078] 步骤S110:获取消息生产者生产的目标消息。
[0079] 目标消息可以是消息生产者产生的,消息生产者可以是电子设备中的某个模块,也可以是其他设备,或者是与该电子设备进行交互的终端。例如,在智能机器人服务系统
中,当需要通过微信或QQ等即时通信账号添加用户时,消息生产者可以是语音机器人(如呼
叫服务),语音机器人可用于获取用户的微信或QQ等账户信息,然后通过沟通机器人(如智
能客服)来通过微信或QQ添加用户。此时,语音机器人或沟通机器人可以是该智能机器人服
务系统中的一个模块,或者是与该智能机器人服务系统交互的服务器或终端等,而本申请
的基于人机对话的消息处理方法即可由智能机器人服务系统执行,该智能机器人服务系统
部署在电子设备中,该电子设备也可以是服务器或终端等设备。为了便于理解,下述实施例
中均以智能机器人服务系统,消息生产者和消息消费者为智能机器人服务系统中的一个模
块为例进行说明。
[0080] 以智能机器人服务系统为例,目标消息则可以是语音机器人所产生的消息,例如,语音机器人可以通过向一些用户拨打电话,以根据设定好的话术向用户推荐产品,若语音
机器人在与用户的沟通过程中,识别到用户有添加微信或QQ的需求,或者有约定下次沟通
的时间,则将用户的微信或QQ、或约定下次沟通的时间记录下来,并发送给智能机器人服务
系统。或者为了挖掘潜在用户,语音机器人还可以将识别到的用户的其他信息记录下来,并
发送给智能机器人服务系统,这些微信、QQ或用户的其他信息则可以称为是目标消息。
[0081] 步骤S120:判断所述目标消息是否满足预设条件。
[0082] 在智能机器人系统的应用场景下,为了避免消息消费者对消息的消费频率过快可能导致消息消费者卡顿的问题或一些消息有限速处理需求,或者是一些消息不能马上消费
处理,所以,预设条件可以包括限速消费条件和/或延时消费条件,限速消费条件用于限制
消息被处理的频率,延时消费条件可用于限制对消息进行延时消费处理。
[0083] 所以,在获取到目标消息后,可以先判断目标消息是否满足限速消费条件或延时消费条件,或者,判断目标消息是否还同时满足限速消费条件和延时消费条件,因为某些消
息可能既需要限速也需要延时,比如语音机器人识别到用户想要在下午四点加微信沟通,
此时该消息则需要延时处理,而为了限制消息消费者加微信的速度,则该消息也需要被限
速处理。
[0084] 步骤S130:将所述目标消息加入对应的目标消息队列中。
[0085] 若目标消息满足预设条件,即若目标消息满足限速消费条件和/或延时消费条件,则将目标消息加入到对应的目标消息队列中,如图2所示。
[0086] 可以理解地,可以对满足不同条件的目标消息进行不同的处理,即目标消息满足的条件不同,对应的目标消息队列的作用也不同。例如,目标消息满足限速消费条件,则目
标消息队列的作用是为了限制消息消费者对目标消息队列里的消息进行限速消费,若目标
消息满足延时消费条件,则目标消息队列的作用是为了限制消息消费者对目标消息队列里
的消息进行延时消费,若目标消息同时满足限速消费条件和延时消费条件,则目标消息队
列的作用是为了限制消息消费者对目标消息队列里的消息进行限速和延时消费。
[0087] 步骤S140:在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理。
[0088] 由于限速消费和延时消费都不是即时消费,所以在将目标消息加入目标消息队列中后,消息消费者并不会即时对目标消息进行消费处理。并且目标消息队列中还存储有满
足预设条件的其他消息,所以可以对目标消息队列中的消息是否达到消费时间进行检测,
若达到消费时间,则通过消息消费者对目标消息队列中的消息进行消费处理。
[0089] 可以理解地,系统中也可以有多种消息队列,满足不同条件的消息存入不同的消息队列中,例如,系统中包括有限速队列和延时队列,满足限速消费条件的消息存入限速队
列中,满足延时消费条件的消息存入延时队列中,而同时满足限速消费条件和延时消费条
件的消息,可以先将消息加入延时队列,消费时间到达后,将消息从延时队列取出加入限速
队列。
[0090] 其中,消息队列可以认为是用于将消息按队列存储的中间件,这样消息消费者就可以有序对消息队列中的消息进行依次消费处理。消息消费者也可以是电子设备中的某个
模块,也可以是其他设备,或者是与该电子设备进行交互的终端,如消息消费者可以是智能
机器人服务系统中的一个模块,或者是与智能机器人服务系统交互的服务器或终端,如消
息消费者为上述智能机器人服务系统中的沟通机器人。
[0091] 另外,消费处理可以是指消息消费者对消息进行对应的处理,例如,对于需要加微信或QQ的消息,则对应的消费处理为通过微信或QQ账号添加用户,对于需要在约定时间再
次呼叫的消息,则对应的消费处理为在约定时间再次呼叫用户(例如,沟通机器人将消息从
消息队列中取出,推送给语音机器人,由语音机器人再次呼叫)。可以理解地,对消息的消费
处理的方式在不同的应用场景下可能有不同处理,所以,可以针对不同的应用场景配置不
同的处理方法。
[0092] 在上述实现过程中,通过对目标消息进行限速消费条件和/或延时消费条件的判断,从而可以对目标消息进行限速和/或延时处理,即可以对消息进行区分处理,本申请的
基于人机对话的消息处理方法可以适应不同类型的消息在处理需求上的差异性。
[0093] 下面针对限速消费的场景进行详细说明。
[0094] 若预设条件包括限速消费条件,在判断目标消息是否满足预设条件时,可以获取目标消息的消息类型,若消息类型为设定限速消费类型,则确定目标消息满足限速消费条
件。
[0095] 可以理解地,系统中可以设置哪些消息类型的消息需要被限速消费,所以针对这些消息类型的消息则认为是满足限速消费条件的。例如,针对微信或QQ号的加好友消息,其
需要限速处理(因为微信或QQ有现在频繁加好友的功能,或者说如果消费者频繁添加好友
其可能会出现卡顿的问题),所以,系统中可预先配置设定限速消息类型,如设定限速消息
类型为微信或QQ的加好友消息,若目标消息为微信或QQ的加好友消息,则确定目标消息满
足限速消费条件,需要被限速消费处理。
[0096] 上述通过识别目标消息的消息类型来确定目标消息是否满足限速消费条件,如此可以快速对消息生产者产生的消息进行下一步处理,提高消息处理效率。
[0097] 在限速消费场景下,可以在系统中设置有多个限速队列,每个限速队列对应一个限速时间,这样在将目标消息加入对应的目标消息队列时,可以获取目标消息对应的目标
限速时间,然后确定与目标限速时间匹配的目标限速队列,然后将目标消息加入到目标限
速队列中,其中,目标限速队列即为目标消息队列。
[0098] 例如,系统中设置有限速队列1和限速队列2(限速队列的数量可以根据实际需求灵活设置),限速队列1对应的限速时间为5分钟,表示限速队列1中的消息为每隔5分钟消费
一次(比如沟通机器人每隔5分钟加一次好友),限速队列2队列的限速时间为10分钟,表示
限速队列2中的消息为每隔10分钟消费一次(比如沟通机器人每隔10分钟加一次好友)。
[0099] 消息生产者在生产目标消息后,可以为目标消息添加限速时间,消息生产者也可以根据不同需求来为目标消息添加限速时间,如加微信为每隔5分钟一次,如果目标消息为
加微信,则该目标消息的目标限速时间可以为5分钟,如加QQ为每隔10分钟一次,如果目标
消息为加QQ,则该目标消息的目标限速时间可以为10分钟,也就是说,也可以根据目标消息
的消息类型来为目标消息添加不同的限速时间。或者,系统在获取到目标消息后,根据目标
消息的消息类型来确定对应的目标限速时间,即系统中预先配置不同消息类型对应的限速
时间,如此可以直接根据配置信息确定目标消息对应的目标限速时间。
[0100] 如果目标消息的目标限速时间为5分钟,则将目标消息加入到限速队列1中,此时限速队列1称为目标限速队列,如果目标消息的目标限速时间为10分钟,则将目标消息加入
到限速队列2中,此时限速队列2称为目标限速队列。
[0101] 在上述实现过程中,通过匹配限速时间将目标消息加入到匹配的目标限速队列,以使得不同的消息可以采用不同的限速时间进行处理。
[0102] 在上述实施例的基础上,限速队列实现限速消费的方式可以是采用锁的操作来限速,即每个限速队列配置有锁,这样可以通过以下方式判断目标消息队列中的消息是否达
到消费时间:判断目标限速队列的锁是否处于解锁状态,若是,则确定目标限速队列中的消
息达到消费时间。
[0103] 例如,针对每个限速队列配置有对应的锁,每个限速队列对应的锁设置有过期时间,在过期时间到达后,自动解锁,比如上述的限速队列1的锁的过期时间可以为5分钟,即
每次上锁后5分钟自动解锁,限速对应1的锁的过期时间可以为10分钟,即每次上锁后10分
钟自动解锁。
[0104] 如果目标消息存入限速队列1,则可实时检测限速队列1的锁是否处于解锁状态,处于解锁状态的限速队列中的消息可以被消息消费者取出消费,即处于解锁状态时,限速
队列1中的消息达到消费时间,可以通过消息消费者进行消费处理,如可以通知消息消费者
来从限速队列1中取消息。比如,限速队列1处于解锁状态时,沟通机器人可以从限速队列1
中取出一条微信号,然后执行微信加好友的操作。
[0105] 可以在检测到限速队列1解锁,被消息消费者取出一条消息后,系统可以自动重新对限速队列1进行上锁操作,这样只有隔5分钟后才能继续取消息消费,如此一个沟通机器
人每隔5分钟取一条微信加好友消息,可以限制微信加好友的速度,达到限速的目的。
[0106] 在上述实现过程中,通过为限速队列配置锁来达到限速的目的,便于操作,实现简单。
[0107] 在上述实施例的基础上,为了减少系统对限速队列的上锁操作,还可以由消息消费者来对限速队列进行上锁,如通过消息消费者从目标限速队列中获取一条消息进行消费
处理后,通过消息消费者对目标限速队列执行上锁操作。
[0108] 例如,消息消费者可以实时或周期性地检测目标限速队列的解锁状态,若消息消费者检测到目标限速队列处于解锁状态时,则消息消费者自动从目标限速队列中取出一条
消息进行处理(当然消息消费者也可以一次性取出多条消息进行处理),然后对目标限速队
列执行上锁操作,以使得目标限速队列重新上锁,目标限速队列处于上锁状态时,消息消费
者不能从中获取消息进行处理,如此可通过限速队列的状态来限制消息消费者处理消息的
速度。
[0109] 其中,消息消费者周期性地检测目标限速队列的状态时,可以设置周期时间,如消息消费者每隔几秒钟去检测目标限速队列的当前状态,如果目标限速队列处于上锁状态,
则拿不到消息,若目标限速队列处于解锁状态,则取出消息进行处理。
[0110] 另外,系统中可以有多个消息生产者,每个限速队列的存储空间是有限的,比如每个限速队列只能存储20条消息,目标消息对应的目标限速队列可能有多个,这时可以随机
选取其中一个目标限速队列,然后将该目标消息加入该目标限速队列。当然,多个消息生产
者都可以往一个限速队列中加入消息,比如多个语音机器人可以同时向各自的用户进行呼
叫,在识别到用户有加微信或QQ的需求时,多个语音机器人都会往对应的限速队列中加入
消息。
[0111] 消息生产者在往限速队列中加入消息时,可以通过计数器控制加入消息的数量,比如系统中可以针对每个限速队列维护一个计数器,用于统计对应的限速队列中已加入的
消息数量,在计数器达到该限速队列的最大容量时,如限速队列最大可存20条消息,而计数
器计数到20时,如果还有消息生产者往该限速队列中加消息,则禁止其加入,此时消息生产
者可以将该消息加入其他匹配的限速队列中,反之,若限速队列未到其最大容量,则可继续
往里加入消息。
[0112] 若多个消息生产者往多个限速队列中加入消息时(如多个消息生产者均获得有加微信消息,该微信消息对应有多个限速队列进行存储),则可以采用平均分配的原则选择对
应的限速队列,如平均分配往每个限速队列中加入消息的数量,以保证每个限速队列中的
消息总量在同一水平。
[0113] 而每个限速队列也可以至少对应一个消息消费者,也就是沟通机器人,比如限速队列1对应消息消费者1和消息消费者2,这两个消息消费者都可以对限速队列1进行监测,
在监测到限速队列1处于解锁状态时,消息消费者1和消息消费者2可以轮流从限速队列1取
消息进行处理,比如这些解锁后,由消息消费者1取消息进行处理,下次解锁后,由消息消费
者2取消息进行处理。当然,一个消息消费者可以对应多个限速队列,即可以对多个限速队
列中的消息进行消费处理,这样可以在限制一个限速队列中消息的处理速度外,还可以提
高消息消费者的资源利用。
[0114] 在上述实施例的基础上,为了避免消息消费者去监测限速队列的状态而耗费消息消费者过多资源的问题,可以通过外部的服务器来监测各个限速队列的锁是否处于解锁状
态,若通过服务器监测到目标限速队列的锁处于解锁状态时,则通过服务器向消息消费者
发送提示信息,该提示信息用于指示消息消费者对目标限速队列中的消息进行消费处理。
[0115] 可以理解地,每个消息消费者可以与服务器建立长连接SDK,这样服务器可以实时向消息消费者推送对应的提示信息。服务器采用了阻塞式I/O模型,消息消费者也可以主动
从服务器获取消息,拿到消息后才会返回,否则会继续等待服务器向其发送消息。消息消费
者与服务器建立长连接的方式获取提示消息,可以避免消息消费者与限速队列之间不断建
立无效连接(如不断访问限速队列是否能够取消息),减少消息消费者与限速队列之间的交
互。
[0116] 其中,服务器发送给消息消费者的提示信息中可携带有目标限速队列的标识,这样消息消费者在接收到该提示信息后,即可知晓目标限速队列当前处于解锁状态,可从目
标限速队列中获取消息进行处理。
[0117] 而在系统中存在多个消息消费者,这多个消息消费者都可以对目标限速队列中的消息进行处理的情况下,服务器在向消息消费者发送提示信息时,可以检测各个消息消费
者的空闲状态,选择向当前处于空闲的消息消费者发送提示信息,如当前有3个消息消费
者,若其中2个消息消费者都正在处理消息,有一个消息消费者空闲,则服务器向该空闲的
消息消费者发送提示信息,以提示该消息消费者从目标限速队列中取消息进行处理。而若
当前处于空闲状态的消息消费者有多个时,则可以随机选择其中一个空闲的消息消费者,
并向其发送提示信息。
[0118] 在上述实现过程中,通过服务器来监测限速队列的状态,可以避免消息消费者自己监测耗费较多资源的问题,从而可以提高消息消费者对消息的处理效率。
[0119] 另外,在其他实施方式中,限速队列的限速方式还可以采用其他方式实现,如限制消息消费者取数据的速度,如可以为每个消息消费者配置一个定时器,消息消费者通过监
控各自的定时器的定时时间,在定时时间到达后,表示消息消费者可以从对应的限速队列
中取消息进行处理,这样可以不必对消息队列进行更改,而是通过限制消息消费者来到达
限速的目的,可以更简化。
[0120] 上述的限速消费的应用场景可以是沟通机器人加微信或QQ的应用场景,通过采用限速队列来存储消息,这样可以限制沟通机器人对加微信或QQ的速度,达到限速的目的。而
对应不需要限速的消息,可以直接将消息加入到实时消费的消息队列中,该消息队列没有
配置限速功能,即没有配置锁,消息消费者可以随时从中获取消息进行处理。
[0121] 下面针对延时消费的场景进行详细说明。
[0122] 若预设条件包括延时消费条件,在判断目标消息是否满足预设条件时,可以判断目标消息携带的消费时间戳是否晚于当前时间,若是,则确定目标消息满足延时消费条件。
[0123] 例如,消息生产者在生产一条消息后,可以为该消息打上对应的消费时间戳,如语音机器人在识别到用户需要在下午四点再次沟通时,则可以为该条消息打上消费时间戳(x
年x月x日下午四点),这样系统在获取到目标消息后,可判断目标消息携带的消费时间戳是
否晚于当前时间,其中当前时间可以自动读取,如果晚于当前时间,则表示目标消息需要延
时消费,满足延时消费条件。如果不晚于当前时间,则表示目标消息不需要延时消费,对于
不需要延时消费处理的消息,可以将消息直接加入实时消费的消息队列中,该消息队列中
的消息不需要延时处理,消息消费者可以实时从中获取消息进行处理。
[0124] 在上述实施例的基础上,如果目标消息满足延时消费条件,则将目标消息加入到目标消息队列中,此时目标消息队列可以理解为是延时队列,目标消息队列可以采用哈希
表实现,所以,可以将需要延时的目标消息加入到对应的哈希表中。
[0125] 例如,针对电话重呼的场景,语音机器人在和用户的沟通过程中,用户可能在开车,需要将电话沟通的时间修改到下午两点,即下午两点重呼,这些消息可以认为是需要延
时处理的消息。针对这些延时处理的消息,智能机器人系统可以构建一张哈希表,用于存储
需要延时的数据。哈希表是一种KV数据结构,即数组加链表结构,键为数组结构,值为双向
链表结构,也就是键值对模型,键就是哈希值,值就是具体的消费时间戳。哈希值是根据消
费时间戳生成的,这样可以将需要延时的消息插入到该链表结构的尾部,采用哈希表结构
可以实现数据的快速查找。
[0126] 为了对消息的消费时间进行精确处理,消费时间戳可以精确到秒级单位,例如,在x年x月x日下午15点23分16秒有五个消息需要延时,就将这五个消息加入到哈希表中这个
时间戳下对应的链表的尾部。
[0127] 另外,需要延时的消息可以包括两种:指定时间的延时消息和当前时间下延迟一定时间的延时消息,指定时间的延时消息可以直接加入到对应时间戳下的链表尾部,若是
当前时间下延迟一定时间的延时消息,则可以根基当前时间推算出该消息的处理时间后,
根据处理时间将该消息加入到对应的时间戳下的链表尾部。
[0128] 例如,延时消息有可能是用户和语音机器人约好延迟到下午四点通话,则将该消息加入到哈希表中的下午四点的时间戳对应的链表尾部;也有可能是用户当前未接通状
态,则按照预设时长设定下一次拨打电话的时间,可能是当前时间往后三个小时,也有可能
是往后三天,则可以根据预设时长计算延迟后的处理时间,并将该消息添加到延迟时间对
应的时间戳的链表尾部。
[0129] 在上述实施例的基础上,可以通过以下方式判断目标消息队列中的消息是否达到消费时间:定时从哈希表中读取消费时间戳为当前时间的当前消费消息,其中,若目标消息
的消费时间戳为当前时间,则当前消费消息包括目标消息,然后可将消费时间戳为当前时
间的当前消费消息确定为达到消费时间的消息。
[0130] 如图3所示,消息先被加入到哈希表中,系统可以实时或定时(如每隔几秒)遍历哈希表中的哈希值,系统可以将当前时间对应的时间戳生成哈希值,然后从哈希表中找到与
该哈希值对应的键值,然后找到该键值对应的消息,这些消息即为当前消费消息,已经到达
消费时间。例如当前时间为x年x月x日下午15点23分16秒,则可以在哈希表中这个时间戳下
的链表上取出消息,如有2个消息,则从链表中取下这2个消息,然后发给消息消费者进行消
费处理。
[0131] 或者,从链表中取下的2个消息,还可以将这2个消息加入到实时消费的消息队列中,这样消息消费者可以从这消息队列中依次取消息进行处理。
[0132] 该实时消费的消息队列可以称为实时消费队列,消息消费者可以实时从实时消费队列中取消息进行处理,所以在确定目标消息队列中的消息的消费时间到达后,可以先将
目标消息加入到对应的目标实时消费队列中,然后通过消息消费者对目标实时消费队列中
的消息进行消费处理。
[0133] 其中,由于存储的消息可能较多,系统中可能设置有多个实时消费队列,而目标实时消费队列可以是指其中任意一个实时消费队列,或者也可以是其中数据量最少的一个实
时消费队列,每次从哈希表中取出消息后,将消息存入数据量最少的一个实时消费队列中,
则可以确保各个实时消费队列的数据量的均衡,以有效利用各个实时消费队列的存储资
源。
[0134] 在上述实现过程中,通过定时从哈希表中获取当前消费消息进行处理,可以及时获取当前需要处理的延时消息,从而可提高对延时消息处理的效率。
[0135] 在上述实施例的基础上,为了提高对消息的处理效率,还可以针对不同消息类型的消息存储在不同的消息队列中,如系统中还可以设置有多个实时消费队列,每个实时消
费队列用于存储的消息类型不同,所以在将目标消息加入到实时消费队列中时,可以先获
取目标消息的消息类型,然后确定与消息类型匹配的目标实时消费队列,并将目标消息加
入到该目标实时消费队列中。
[0136] 例如,该场景中消息类型的定义可以与上述限速消费场景中消息类型的定义不一样,在延时消费场景下,消息类型可以分为保险业务数据、销售数量、沟通数据等,这些数据
可以通过不同服务的语音机器人来获取。而每个实时消费队列中的消息可以通过不同类型
的消息消费者来进行处理,所以,可以将不同消息类型的消息存入不同的实时消费队列,以
便于对消息进行分类处理。
[0137] 当然,每个实时消费队列可以对应多个消息消费者,这些消息消费者可以同时从实时消费队列中取出多条消息进行并行处理,以提高消息的处理效率。
[0138] 在上述实施例的基础上,由于是定时从哈希表中读取当前消费消息,则可能导致一些消息被漏洞,所以为了避免哈希表中有漏洞的消息未被取出来处理,还可以通过定时
任务搜索在哈希表中一定时长内未被取出处理的消息,并将该消息放入实时消费队列中。
[0139] 例如,定时任务可以是每隔15秒搜索哈希表中已经超期的消息,即每隔15秒搜索哈希表的消费时间戳早于当前时间的消息,然后将这些已经过期的消息从哈希表中取出
来,放入实时消费队列中进行处理,以确保数据不会出现丢失的情况。
[0140] 另外,为了便于对消息进行查找,还可以通过定时任务将消息批量存储在缓存中,如一天存储一次,即每天将消息生产者生产的所有消息均持久化到数据库,并对每条消息
标记是否已消费的消息,这样每次系统在启动时,可以从数据库中读出未被消费的消息继
续加入到实时消费队列中进行处理。
[0141] 而对于同时满足限速消费条件和延时消费条件的消息,比如语音机器人识别到用户需要在当前下午四点加微信,则可以先将该消息存储在哈希表中对应时间戳下的链表尾
部,然后在该消息的消费时间戳为当前时间时,从哈希表中取出该消息,并将该消息加入到
上述限速消费场景下的限速队列中,从而可实现延时消费和限速消费的目的。
[0142] 请参照图4,图4为本申请实施例提供的一种基于人机对话的消息处理装置200的结构框图,该装置200可以是电子设备上的模块、程序段或代码。应理解,该装置200与上述
图1方法实施例对应,能够执行图1方法实施例涉及的各个步骤,该装置200具体的功能可以
参见上文中的描述,为避免重复,此处适当省略详细描述。
[0143] 可选地,所述装置200包括:
[0144] 消息获取模块210,用于获取消息生产者生产的目标消息;
[0145] 判断模块220,用于判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费条件和/或延时消费条件;
[0146] 消息存储模块230,用于若所述目标消息满足预设条件,则将所述目标消息加入对应的目标消息队列中;
[0147] 处理模块240,用于在所述目标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行消费处理。
[0148] 可选地,所述预设条件包括限速消费条件,所述判断模块220,用于获取所述目标消息的消息类型;若所述消息类型为设定限速消息类型,则确定所述目标消息满足限速消
费条件。
[0149] 可选地,设置有多个限速队列,每个限速队列对应一个限速时间,所述判断模块220,用于获取所述目标消息对应的目标限速时间;确定与所述目标限速时间匹配的目标限
速队列;将所述目标消息加入到所述目标限速队列中,其中,所述目标限速队列为所述目标
消息队列。
[0150] 可选地,每个限速队列配置有锁,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0151] 判断所述目标限速队列的锁是否处于解锁状态;
[0152] 若是,则确定所述目标限速队列中的消息达到消费时间。
[0153] 可选地,所述判断所述目标限速队列的锁是否处于解锁状态,包括:
[0154] 通过服务器监测各个限速队列的锁是否处于解锁状态;
[0155] 所述处理模块240,用于若通过所述服务器监测到所述目标限速队列的锁处于解锁状态时,通过所述服务器向所述消息消费者发送提示信息,所述提示信息用于指示所述
消息消费者对所述目标限速队列中的消息进行消费处理。
[0156] 可选地,所述预设条件包括延时消费条件,所述判断模块220,用于判断所述目标消息携带的消费时间戳是否晚于当前时间;若是,则确定所述目标消息满足所述延时消费
条件。
[0157] 可选地,所述目标消息队列采用哈希表实现,所述判断模块220,用于将所述目标消息加入到对应的哈希表中。
[0158] 可选地,通过以下方式判断所述目标消息队列中的消息是否达到消费时间:
[0159] 定时从所述哈希表中读取消费时间戳为当前时间的当前消费消息,其中,若所述目标消息的消费时间戳为当前时间,则所述当前消费消息包括所述目标消息;
[0160] 将所述消费时间戳为当前时间的当前消费消息确定为达到消费时间的消息。
[0161] 可选地,所述处理模块240,用于将所述目标消息加入到对应的目标实时消费队列中;通过消息消费者对所述目标实时消费队列中的消息进行消费处理。
[0162] 可选地,设置有多个实时消费队列,每个实时消费队列用于存储的消息类型不同,所述处理模块240,用于获取所述目标消息的消息类型;确定与所述消息类型匹配的目标实
时消费队列;将所述目标消息加入到所述目标实时消费队列中。
[0163] 需要说明的是,本领域技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再重复描述。
[0164] 请参照图5,图5为本申请实施例提供的一种用于执行基于人机对话的消息处理方法的电子设备的结构示意图,所述电子设备可以包括:至少一个处理器310,例如CPU,至少
一个通信接口320,至少一个存储器330和至少一个通信总线340。其中,通信总线340用于实
现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口320用于与其他节点设
备进行信令或数据的通信。存储器330可以是高速RAM存储器,也可以是非易失性的存储器
(non‑volatile memory),例如至少一个磁盘存储器。存储器330可选的还可以是至少一个
位于远离前述处理器的存储装置。存储器330中存储有计算机可读取指令,当所述计算机可
读取指令由所述处理器310执行时,电子设备执行上述图1所示方法过程。
[0165] 可以理解,图5所示的结构仅为示意,所述电子设备还可包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的配置。图5中所示的各组件可以采用硬件、软件或
其组合实现。
[0166] 本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,执行如图1所示方法实施例中电子设备所执行的方法过程。
[0167] 本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算
机执行时,计算机能够执行上述各方法实施例所提供的方法,例如,包括:获取消息生产者
生产的目标消息;判断所述目标消息是否满足预设条件,其中,所述预设条件包括限速消费
条件和/或延时消费条件;若是,则将所述目标消息加入对应的目标消息队列中;在所述目
标消息队列中的消息达到消费时间时,通过消息消费者对所述目标消息队列中的消息进行
消费处理。
[0168] 综上所述,本申请实施例提供一种基于人机对话的消息处理方法及装置,通过对目标消息进行限速消费条件和/或延时消费条件的判断,从而可以对目标消息进行限速和/
或延时处理,即可以对消息进行区分处理,本申请的基于人机对话的消息处理方法可以适
应不同类型的消息在处理需求上的差异性。
[0169] 在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻
辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可
以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间
的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连
接,可以是电性,机械或其它的形式。
[0170] 另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多
个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的
目的。
[0171] 再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0172] 在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际
的关系或者顺序。
[0173] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的
任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。