本发明涉及计算机技术领域,特别涉及一种基于队列的业务请求处理方法。
背景技术:
随着计算机网络技术的发展,人们的工作娱乐及日常生活中,均少不了客户端的身影,客户端能让用户直观地进行操作,发布自己想要发布的任务或获取自己想要获取的数据,并且能够实时获取到操作状态或操作结果。客户端操作的请求最终发送给应用服务器进行处理,客户端与服务器在进行数据交互的过程中,通常会涉及多种操作类型,每种操作类型包括多个业务,每个业务可能涉及批量数据处理。现有技术中,往往通过类似于串行的方式处理,先向应用服务器发送一个业务请求,在完成该业务请求后,再发送下一个业务请求,但有些业务请求并非是数据交互过程中所必须的,特别是一个业务请求涉及到大批量数据处理时,用户往往需要等待较长的时间获取操作结果,这样整个数据交互流程效率过低,导致用户体验较差。
技术实现要素:
鉴于上述问题,本发明提供一种克服上述问题或者至少部分地解决上述问题的一种基于队列的业务请求处理方法。
本发明解决其技术问题所采用的技术方案是:
一种基于队列的业务请求处理方法,包括:
接收并响应用户触发的业务请求,获取业务请求数据;所述业务请求数据包括用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据;
添加属于预设操作类型的业务请求数据到数据库的数据表中;所述数据表的字段包括队列状态、执行次数、用户ID、操作类型、优先级和操作所需数据;
业务请求数据成功添加到数据库后,添加所述业务请求数据到预设操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理;
应用服务器定时处理各操作类型中的正常队列,每种操作类型中的正常队列按预设优先级从高到低进行处理;正常队列处理失败则将队列中的业务请求数据添加到重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理;
应用服务器定时处理各操作类型中重启队列的业务请求数据;业务请求处理失败且执行次数未超过预设值则将该业务请求数据重新添加到所述操作类型的重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理。
优选的,基于队列的业务请求处理方法还包括:
接收添加到数据库出错指令,确定业务请求失败。
优选的,基于队列的业务请求处理方法还包括:
处理正常队列或重启队列中的业务请求之前,判断所述业务请求是否已取消;如果已取消,删除队列中的业务请求,退出处理。
优选的,基于队列的业务请求处理方法还包括:
应用服务器处理重启队列中的业务请求失败后,若执行次数超过预设值,删除队列中的业务请求,退出处理。
优选的,添加属于预设操作类型的业务请求数据到数据库的数据表中时,所述数据表中的用户ID、操作类型、优先级和操作所需数据分别从业务请求数据的用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据获取。
优选的,所述业务请求数据成功添加到数据库后,添加所述业务请求数据到操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理,进一步包括:
业务请求数据成功添加到数据库后,添加所述业务请求数据和该业务请求数据在数据库的所述数据表中的唯一标识到操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理。
优选的,每处理一次正常队列或重启队列中的业务请求时,数据库的所述数据表中的执行次数字段增1。
优选的,所述预设操作类型通过配置文件进行设置;不属于预设操作类型的业务请求不添加到数据库。
优选的,所述预设优先级为根据操作类型中业务的重要程度设置的优先级,数值大的优先级高,优先执行。
优选的,所述队列状态包括等待执行、正在执行、重启、取消、执行成功和执行失败;业务请求数据添加到数据库的所述数据表中后,修改队列状态为等待执行;应用服务器处理正常队列或重启队列中的业务请求数据时,修改队列状态为正在执行;应用服务器处理正常队列或重启队列中的业务请求数据失败后,修改队列状态为重启;业务请求取消后,修改队列状态为取消。
优选的,应用服务器定时以线程并发的方式处理正常队列和重启队列;其中正常队列的定时时间按操作类型设置,定时时间到,同一操作类型下的正常队列按预设的优先级执行。
本发明的基于队列的业务请求处理方法,接收并响应用户触发的业务请求,获取包括用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据的业务请求数据;进一步将业务请求数据添加到数据库的数据表中,从而对业务请求数据进行存储,并根据处理进展更新业务请求对应的队列状态和执行次数,从而指示应用服务器对业务请求进行处理;添加所述业务请求数据到预设操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理,便于将同一操作类型下的不同业务按重要程度进行区别对待,重要程度高的业务优先处理;正常队列处理失败后将队列中的业务请求数据添加到重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理,且重启队列中的业务请求不设优先等级,遵循先进先出原则,且一次执行失败后应用服务器能根据定时时间再次到重启队列中执行业务请求,从而提高业务请求的成功率;对业务请求的执行次数加以限制,可以防止业务请求无限次执行,占用资源并影响其他业务请求的执行效率;添加业务请求数据在数据库的数据表中的唯一标识到预设操作类型预设优先级的正常队列,便于在执行到该业务请求时,能够快速定位到数据库中的这条数据,对数据库中的这条数据进行修改;应用服务器定时以线程并发的方式处理正常队列和重启队列,能提高处理速度,加快执行效率,提高用户体验。
综上所述,本发明不再直接将业务请求依次发送到应用服务器进行串行处理,而是将多个业务请求中属于预设操作类型的业务请求按业务优先级放入对应的操作类型的正常队列中,以供应用服务器从正常队列中取出业务请求数据进行处理;正常队列处理失败则将队列中的业务请求数据添加到重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理;在数据交互过程中无需等待应用服务器对预设操作类型的业务请求的反馈,从而提高了数据交互过程的效率,提高了用户体验。
上述说明仅是本发明技术方案的概述,为了能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下列举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述及其他目的、优点和特征。
附图说明
图1为本发明方法的主流程图;
图2为本发明方法的添加队列的流程图;
图3为本发明方法的处理正常队列的流程图;
图4为本发明方法的处理重启队列的流程图;
图5为本发明方法的添加模板过户队列的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步的详细描述。
需要说明的是,本实施方式的方法的执行主体为终端,所述终端为手机、平板电脑、掌上电脑PDA、笔记本或台式机等设备,当然,还可以为其他具有相似功能的设备,本实施方式不加以限制。
参见图1,本发明的一种代码发布的方法,包括如下步骤:
步骤101:接收并响应用户触发的业务请求,获取业务请求数据;
具体的,所述业务请求数据包括用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据。
可理解的是,用户触发业务请求可以通过多种方式进行,例如:通过鼠标点击客户端的交互触发元素,或在触摸屏上点击客户端的交互触发元素,本实施方式对此不加以限制。
步骤102:添加属于预设操作类型的业务请求数据到数据库的数据表中;
具体的,所述预设操作类型通过配置文件进行设置;不属于预设操作类型的业务请求不添加到数据库。
所述数据表的字段包括队列状态、执行次数、用户ID、操作类型、优先级和操作所需数据。数据表中的用户ID、操作类型、优先级和操作所需数据字段分别从业务请求数据的用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据获取。业务请求数据添加到数据库的数据表后,所述队列状态字段为等待执行,所述执行次数为0。
步骤103:业务请求数据成功添加到数据库后,添加所述业务请求数据到预设操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理;
具体的,作为一种优选,本步骤进一步包括:
所述业务请求数据成功添加到数据库后,添加所述业务请求数据和该业务请求数据在数据库的所述数据表中的唯一标识到操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理。具体的,所述业务请求数据和该业务请求数据在数据库的所述数据表中的唯一标识组装成新的业务请求数据放入正常队列。
具体的,所述业务请求数据在数据库的所述数据表中的唯一标识可理解为数据表的自增ID,数据表每增加一条记录,所述自增ID增1。添加业务请求数据在数据库的数据表中的唯一标识到预设操作类型预设优先级的正常队列,便于在执行到该业务请求时,能够快速定位到数据库中的这条数据,对数据库中的这条数据进行修改。
具体的,所述预设优先级为根据操作类型中业务的重要程度设置的优先级,数值大的优先级高,优先执行。可理解的是,为了便于属于同一操作类型的重要程度高的业务先执行,本实施方式中,可以将属于同一操作类型的业务按照业务的重要程度设置不同优先级的正常队列,预设优先级数据越大,优先级越高,越优先执行。
步骤104:应用服务器定时处理各操作类型中的正常队列,每种操作类型中的正常队列按预设优先级从高到低进行处理;正常队列处理失败则将队列中的业务请求数据添加到重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理;
具体的,处理正常队列的业务请求时,数据库的所述数据表中的对应业务请求数据的队列状态字段修改为正在执行,且执行次数字段增1。
可理解的是,正常队列处理成功或失败都将从该正常队列中删除对应的业务请求或将业务请求标记为已处理过,正常队列中不再执行该业务请求,即正常队列中的业务请求只执行一次。进一步的,正常队列处理成功修改队列状态为执行成功,正常队列处理失败修改队列状态为重启。
具体的,正常队列处理失败则将队列中的业务请求数据添加到重启队列尾部中所述的业务请求数据包括了数据表中的唯一标识。
步骤105:应用服务器定时处理各操作类型中重启队列的业务请求数据;业务请求处理失败且执行次数未超过预设值则将该业务请求数据重新添加到所述操作类型的重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理。
具体的,处理重启队列的业务请求时,数据库的所述数据表中的对应业务请求数据的队列状态字段修改为正在执行,且执行次数字段增1。
可理解的是,重启队列处理失败后,如果对应的业务请求的执行次数未超过预设值,则业务请求数据将重新添加到所述操作类型的重启队列尾部,以供定时时间到后,应用服务器从重启队列中取出业务请求数据再次进行处理,即重启队列中的业务请求可以执行多次。进一步的,重启队列处理成功修改队列状态为执行成功,重启队列处理失败且执行次数未超过预设值修改队列状态为重启,重启队列处理失败且执行次数超过预设值修改队列状态为执行失败。
具体的,重启队列中的业务请求是没有优先级的,按照先进先出的原则进行处理。
综上,可理解的是,所有操作类型的所有业务请求在数据库中共用一个上述数据表,表中的一条记录代表一个业务请求,具体的,批量数据处理属于一个业务请求。当然,也可以是每种操作类型的所有业务请求在数据库中共用一个上述数据表,表中的一条记录代表一个业务请求,本实施方式对此不加以限制。但必须说明的是,正常队列和重启队列中相同的业务请求对应同一张上述数据表。
进一步的,基于队列的业务请求处理方法还包括接收添加到数据库出错指令,确定业务请求失败。具体的,执行步骤102中的“添加属于预设操作类型的业务请求数据到数据库的数据表中”步骤后,如果添加失败,在终端的客户端界面上显示添加结果。
进一步的,基于队列的业务请求处理方法还包括处理正常队列或重启队列中的业务请求之前,判断所述业务请求是否已取消;如果已取消,删除队列中的业务请求,退出处理。具体的,步骤104在处理业务请求之前,判断redis中对应业务请求的取消键是否存在,如果取消键存在,表明用户已经取消本次业务请求,不再进行处理;同样的,步骤105在处理业务请求之前,判断redis中对应业务请求的取消键是否存在,如果取消键存在,表明用户已经取消本次业务请求,不再进行处理。当然,也可以通过判断队列状态是否为取消来判断业务请求是否已取消。
进一步的,基于队列的业务请求处理方法还包括应用服务器处理重启队列中的业务请求失败后,若执行次数超过预设值,删除队列中的业务请求,退出处理。
进一步的,应用服务器定时以线程并发的方式处理正常队列和重启队列;其中正常队列的定时时间按操作类型设置,定时时间到,同一操作类型下的正常队列按预设的优先级执行。重启队列的定时时间也按操作类型设置,同一操作类型只包含一个重启队列。
本发明基于队列的业务请求处理方法的实施例中,能够接收并响应用户触发的业务请求,获取包括用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据的业务请求数据;进一步将业务请求数据添加到数据库的数据表中,从而对业务请求数据进行存储,并根据处理进展更新业务请求对应的队列状态和执行次数,从而指示应用服务器对业务请求进行处理;添加所述业务请求数据到预设操作类型预设优先级的正常队列,以供应用服务器从正常队列中取出业务请求数据进行处理,便于将同一操作类型下的不同业务按重要程度进行区别对待,重要程度高的业务优先处理;正常队列处理失败后将队列中的业务请求数据添加到重启队列尾部,以供应用服务器从重启队列中取出业务请求数据进行处理,且重启队列中的业务请求不设优先等级,遵循先进先出原则,且一次执行失败后应用服务器能根据定时时间再次到重启队列中执行业务请求,从而提高业务请求的成功率;对业务请求的执行次数加以限制,可以防止业务请求无限次执行,占用资源并影响其他业务请求的执行效率;添加业务请求数据在数据库的数据表中的唯一标识到预设操作类型预设优先级的正常队列,便于在执行到该业务请求时,能够快速定位到数据库中的这条数据,对数据库中的这条数据进行修改;应用服务器定时以线程并发的方式处理正常队列和重启队列,能提高处理速度,加快执行效率,提高用户体验。
为将本发明实施例的代码发布方法阐述得更清楚更明白,以下对本实施例基于队列的业务请求处理方法分添加队列、处理正常队列和处理重启队列进行更详细的说明。
本发明方法的添加队列的流程图参见图2,本实施例以对域名进行批量操作为例进行说明,具体包括如下步骤:
步骤201:选择需要操作的域名、操作类型和操作类型下的业务。
具体的,可以在终端的客户端如管理平台域名页面上进行操作,用户选择需要操作的域名(所述域名可以是多个)、操作类型和操作类型下的业务并点击提交。与域名操作相关的操作类型包括模板过户、批量转入、批量续费、批量设置DNS等。每种操作类型包括多个业务,如模板过户操作类型可以包括交易的模板过户和管理平台域名页面的模板过户及其他。
步骤202:根据用户ID、操作类型、业务的优先级以固定的格式组装数据。
具体的,用户ID可以是用户登录后进行一次业务请求后唯一分配的ID。所述用户ID、操作类型、业务的优先级(在操作类型中的优先级)和操作该业务需要的数据以固定的格式组装成业务请求数据。
步骤203:调用队列添加接口添加业务请求数据到数据库和正常队列。
具体的,所述队列添加接口的参数包括所述用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据。
具体的,用户在界面上执行批量转入、模板过户等类型的操作时,队列添加接口根据操作类型将业务分发给不同的队列,即所有操作类型都通过同一接口进行分发,接口根据操作类型的不同将业务添加到不同队列。
步骤204:判断操作类型是否为预设操作类型。
具体的,所述预设操作类型通过配置文件进行设置;不属于预设操作类型的业务请求不添加到数据库。判断所述队列添加接口中的操作类型是否包含在配置文件中,如果不包含,转步骤208,在界面显示添加失败;如果包含,转步骤205。
步骤205:添加业务请求数据到数据库。
具体的,添加属于预设操作类型的业务请求数据到数据库的数据表中。所述数据表的字段包括队列状态、执行次数、用户ID、操作类型、优先级和操作所需数据。数据表中的用户ID、操作类型、优先级和操作所需数据字段分别从业务请求数据的用户ID、操作类型、在操作类型中的优先级和操作该业务需要的数据获取。业务请求数据添加到数据库的数据表后,所述队列状态字段为等待执行,所述执行次数为0。
步骤206:判断数据是否成功添加到数据库。
具体的,如果添加到数据库失败,转步骤208,在界面显示添加失败;如果添加到数据库成功,转步骤207。
步骤207:将业务请求数据在数据库的数据表中的唯一标识和业务请求数据一起添加到操作类型预设优先级的正常队列。
具体的,所述业务请求数据在数据库的所述数据表中的唯一标识可理解为数据表的自增ID,数据表每增加一条记录,所述自增ID增1。添加业务请求数据在数据库的数据表中的唯一标识到预设操作类型预设优先级的正常队列,便于在执行到该业务请求时,能够快速定位到数据库中的这条数据,对数据库中的这条数据进行修改。
具体的,所述预设优先级为根据操作类型中业务的重要程度设置的优先级,数值大的优先级高,优先执行。可理解的是,为了便于属于同一操作类型的重要程度高的业务先执行,本实施方式中,可以将属于同一操作类型的业务按照业务的重要程度设置不同优先级的正常队列,预设优先级数据越大,优先级越高,越优先执行。
本实施例中,每一个操作类型都有5个优先级,如模板过户,交易的模板过户优先级是5,管理平台域名页面的模板过户是3,优先级之所以不同是因为交易的过户是从卖家过户到买家,是不同用户之前的过户,重要程度比较高,所以优先级程度会更高,而管理平台域名管理页面是用户自己的不同模板之间的过户,都是同一个用户的所以优先级会更低。因队列优先级的不同导致了每种操作类型都有5个队列,分别是优先级5到优先级1的队列,如批量操作4个域名进行模板过户,优先级为3,先添加到队列数据库再添加到模板过户队列中,此时在模板过户优先级为3的队列中有4个模板过户的数据等待执行,添加模板过户队列如图5所示。
进一步的,添加成功执行208,页面显示添加成功;添加失败也执行步骤208,页面显示添加失败。
步骤208:页面显示添加结果。
本发明方法的执行正常队列的流程图参见图3,本实施例中,应用服务器的正常队列的每种操作类型按预设的时间间隔去执行定时任务脚本,定时任务脚本通过go程序的线程并发去执行正常队列的业务请求,每个队列中操作类型都有对应的定时脚本去执行,每次定时任务运行都按从优先级高到优先级低的顺序进行处理。
具体包括如下步骤:
步骤301:定时时间到,按操作类型获取正常队列中的业务请求数据,同一操作类型中的正常队列按优先级从大到小处理。
步骤302:判断队列取消键是否存在。
具体的,判断redis中对应业务请求的取消键是否存在,如果取消键存在,表明用户已经取消本次业务请求,不再进行处理;如果取消键不存在,转步骤303。
步骤303:修改数据库的数据表中该业务请求数据的队列状态为正在执行,且执行次数增1。
步骤304:执行操作类型对应的业务请求。
步骤305:判断对应业务请求的正常队列是否执行成功。
具体的,执行成功转步骤306;执行失败转步骤307。
步骤306:修改数据库的数据表中该业务请求数据的队列状态为执行成功。
步骤307:修改数据库的数据表中该业务请求数据的队列状态为重启。
步骤308:将业务请求数据添加到重启队列尾部,等待重启队列的定时脚本执行。
本发明方法的执行重启队列的流程图参见图4,本实施例中,应用服务器的每种操作类型的重启队列按预设的时间间隔去执行定时任务脚本,定时任务脚本通过go程序的线程并发的方式去执行重启队列中的请求任务。具体包括如下步骤:
步骤401:定时时间到,按操作类型获取重启队列中的业务请求数据。
步骤402:判断队列取消键是否存在。
具体的,判断redis中对应业务请求的取消键是否存在,如果取消键存在,表明用户已经取消本次业务请求,不再进行处理;如果取消键不存在,转步骤403。
步骤403:修改数据库的数据表中该业务请求数据的队列状态为正在执行,且执行次数增1。
步骤404:执行操作类型对应的业务请求。
步骤405:判断对应业务请求的重启队列是否执行成功。
具体的,执行成功转步骤406;执行失败转步骤407。
步骤406:修改数据库的数据表中该业务请求数据的队列状态为执行成功。
步骤407:判断执行次数是否超出预设值。
具体的,如果超出不再进行处理;如果未超出,执行步骤408。
步骤408:修改数据库的数据表中该业务请求数据的队列状态为重启。
步骤409:业务请求数据添加到重启队列尾部,处理完成。
上述说明仅是本发明技术方案的概述,为了能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下列举本发明的具体实施方式。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。