CN110955532A - 消息处理方法、装置及计算机设备 - Google Patents

消息处理方法、装置及计算机设备 Download PDF

Info

Publication number
CN110955532A
CN110955532A CN201811130280.2A CN201811130280A CN110955532A CN 110955532 A CN110955532 A CN 110955532A CN 201811130280 A CN201811130280 A CN 201811130280A CN 110955532 A CN110955532 A CN 110955532A
Authority
CN
China
Prior art keywords
message
processed
abnormal
processing
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811130280.2A
Other languages
English (en)
Inventor
何士雄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Gridsum Technology Co Ltd
Original Assignee
Beijing Gridsum Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Gridsum Technology Co Ltd filed Critical Beijing Gridsum Technology Co Ltd
Priority to CN201811130280.2A priority Critical patent/CN110955532A/zh
Publication of CN110955532A publication Critical patent/CN110955532A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种消息处理方法、装置及计算机设备,在对源消息队列中的待处理消息进行处理过程中,若该待处理消息处理过程中出现异常,本发明不会直接删除异常待处理消息,也不会继续等待该异常待处理消息处理结束,而是将该异常待处理消息插入源消息队列,等待再次被提取处理,于此同时,也不会影响对该源消息队列中的下一个待处理消息的处理进度,不仅保证源消息队列中消息的完整性,且避免了因处理异常待处理消息,影响其他待处理消息的处理效率。

Description

消息处理方法、装置及计算机设备
技术领域
本发明涉及数据处理技术领域,更具体地说是涉及一种消息处理方法、装置及计算机设备。
背景技术
在如今大数据时代,各类消息的生产速度非常快,但计算机设备的数据处理能力是有限的,尤其同时产生大量待处理消息的场景下,若这些待处理消息来不及同步处理,往往会发生堵塞,从而极大地降低计算机设备的性能。
为了缓解计算机设备的数据处理压力,通常会在计算机设备中创建消息队列,用来缓存待处理消息,后续消息处理平台可以从消息队列中依次提取待处理消息进行处理,在一定程度上避免了消息堵塞情况的发生。
其中,当对待处理消息进行处理过程中发生异常情况时,通常是直接删除消息队列中异常的待处理消息,将会导致待处理消息丢失,进而导致消息不完整。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的消息处理方法、装置及计算设备。
本发明实施例提供了一种消息处理方法,所述方法包括:
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
可选的,在将所述异常待处理消息插入所述源消息队列之前,所述方法还包括:
获取所述异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断所述处理次数是否达到预设次数;
如果未达到,将所述异常信息添加到所述异常待处理消息中,并执行步骤将所述异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
可选的,如果所述异常待处理消息的处理次数达到预设次数,所述方法还包括:
将携带源消息队列标识的异常待处理消息插入异常消息队列。
可选的,所述方法还包括:
当所述待处理消息的处理过程未出现异常,得到相应的处理消息;
将所述处理消息插入下一个消息队列,以使得下一个消息队列继续对所述处理消息进行处理。
可选的,所述方法还包括:
当所述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
可选的,所述待处理消息的处理过程出现异常,包括:
所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项。
本发明实施例还提供了一种消息处理装置,所述装置包括:
消息处理模块,用于获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
异常处理消息回滚模块,用于当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
可选的,所述装置还包括:异常信息获取模块,用于获取异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断模块,用于判断所述处理次数是否达到预设次数;
第一消息插入模块,用于当所述判断模块判断结果为否,将所述异常信息添加到所述异常待处理消息中,并触发所述异常处理消息回滚模块将异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
可选的,所述装置还包括:
第二消息插入模块,用于当所述判断模块的判断结果为是,将携带源消息队列标识的异常待处理消息插入异常消息队列;
提示信息输出模块,用于当述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
第三消息插入模块,用于响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
待处理消息处理模块,用于在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
本发明实施例还提供了一种计算机设备,所述计算机设备包括:
通信接口;
存储器,用于存储实现如上所述的消息处理方法的程序;
处理器,用于加载并执行所述存储器存储的程序,所述程序用于:
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
借由上述技术方案,本发明提供的消息处理方法,在对源消息队列中的待处理消息进行处理过程中,若该待处理消息处理过程中出现异常,本发明不会直接删除异常待处理消息,也不会继续等待该异常待处理消息处理结束,而是将该异常待处理消息插入源消息队列,等待再次被提取处理,于此同时,也不会影响对该源消息队列中的下一个待处理消息的处理进度,不仅保证源消息队列中消息的完整性,且避免了因处理异常待处理消息,影响其他待处理消息的处理效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种消息处理方法的流程示意图;
图2示出了本发明实施例提供的另一种消息处理方法的流程示意图;
图3a示出了本发明实施例提供的另一种消息处理方法的流程示意图;
图3b示出了本发明实施例提供的又一种消息处理方法的流程示意图;
图4示出了本发明实施例提供的一种消息处理装置的结构示意图;
图5示出了本发明实施例提供的另一种消息处理装置的结构示意图;
图6示出了本发明实施例提供的又一种消息处理装置的结构示意图;
图7示出了本发明实施例提供的一种计算机设备的硬件结构示意图。
具体实施方式
针对背景技术部分提出的现有技术问题,为了保证消息的完整性,本领域提出对于处理异常的待处理消息不直接删除,而是将其直接回滚给源消息队列,以使其排队重新进行处理,保证了其他待处理消息的处理及时性。且,为了避免消息重复冗余,本发明在确定消息成功回滚到源消息队列,将继续对下一待处理消息进行处理,即删除了源消息队列中本次提取的异常待处理消息,避免再次提取同一待处理消息进行反复处理。
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,为本发明实施例提供的一种消息处理方法的流程示意图,该方法可以应用于计算机设备,如服务器,具体可以包括但并不局限于下文描述的步骤:
步骤S11,获取源消息队列中的待处理消息,并对该待处理消息进行处理;
在实际应用中,消息队列作为传输至服务器的消息的保存容器,以供消息接收者从中提取所需的消息,实现对消息的异步处理,减少请求消息响应时间和解耦。且,消息队列具有队列先进先出的特点,因此,从消息队列提取的消息,通常是从消息队列的队头提取的,向消息队列插入消息,实际上是在消息队列的队尾添加消息。
由于服务器可以包括多个消息队列,分别用来存储不同阶段的消息,本实施例对各消息队列的具体存储内容不作详述,可以根据实际应用场景确定。而本实施例中的源消息队列是先对于当前待处理消息来说,也就是说,用来存储该待处理消息的消息队列,可以将其称为源消息队列,对于消息传输链路上,相邻的两个消息队列来说,消息发送方的消息队列可以称为源消息队列,消息接收方的消息队列可以称为该源消息队列的下一消息队列。
在本实施例中,由于源消息队列中队头的消息是会被最先提取或发送,为了与其他存储位置的消息进行区别描述,可以将源消息队列中队头的消息记为待处理消息,但并不局限于此。
应该理解的是,对于不同内容的消息,其需要处理的过程往往是不同的,因此,本实施例对获取的待处理消息的处理过程不做限定。
步骤S12,若该待处理消息的处理过程出现异常,将异常待处理消息插入源消息队列,继续对该源消息队列中的下一个待处理消息进行处理;
可选的,在对待处理消息的处理过程中,一旦出现异常情况,比如待处理消息本身错误,或对该待处理消息进行处理的消息处理应用异常等问题,导致异常情况的发生,本实施例可以直接中断当前处理的待处理消息,并获取当前得到的相应的异常信息,该异常信息可以包括该异常待处理消息的异常原因及处理次数,其中,该异常原因可以是异常待处理消息的消息内容缺失、消息处理应用运行异常等,本实施例对该异常消息的内容及其获取方式不做限定。
在本实施例中,为了避免不断对待处理消息进行重试处理,降低消息处理效率,可以设定处理异常的待处理消息允许的重试次数,记为预设次数,本实施例对该预设次数的具体数值不作限定。基于此,在首次对待处理消息进行处理过程中,出现了处理异常,本实施例可以记录对异常待处理消息的处理次数,并将其携带在该异常待处理消息中回溯至源消息队列,直至对同一内容的待处理消息的处理次数达到预设次数,处理结果仍失败,再删除该待处理消息。
在一个实施例中,源消息队列为一个队列,则将异常待处理消息插入该源队列即可,例如,插入该源消息队列的队尾;当然某些消息队列设置有插队接口,也可以根据需要将异常待处理消息插入源消息队列中间或头部等相应位置。
在另外一个实施例中,源消息队列也可以包含几个优先级不同的子队列,可以根据需要将异常待处理消息插入设定优先级的子队列的相应位置。
结合上文分析,由于本实施例对于处理过程异常的待处理消息,不需要等待处理结束,可以直接在出现异常情况时,中断对待处理消息的继续处理,直接将得到的异常处理信息添加到该待处理消息中,并将该待处理消息回滚给源消息队列,即将该异常待处理消息插入源消息队列的队尾,排队等待再次被提取处理,后续处理过程与上文描述的过程类似,本实施例不再赘述。
可见,相对于传统重试方式(即直接对待处理消息重新进行处理),本实施例这种重试方式不会一直不断对同一消息进行重试处理,而是将异常待处理消息回滚至源消息队列重新排序,以使得消息处理平台能够继续对后续其他待处理消息进行处理,避免因待处理消息本身异常,导致其他消息等待处理时间过长,降低消息处理及时性。且,由于本实施例也不会直接删除异常待处理消息,保证了消息完整性。
基于上述实施例描述的本发明核心构思,本发明提供了另一可选实施例,如图2所示的该另一可选实施例的消息处理方法的流程示意图,该方法可以包括以下步骤:
步骤S21,获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
步骤S22,若该待处理消息的处理过程未出现异常,得到相应的处理消息;
步骤S23,将该处理消息插入下一个消息队列,以使得下一个消息队列继续对该处理消息进行处理;
本实施例实际应用中,可以将从源消息队列提取的待处理消息发送至消息处理平台进行处理,若该消息处理平台能够正常处理该待处理消息,可以直接将处理后得到的处理消息发送给下一个消息队列,之后,可以向源消息队列发送处理成功提示信息,以通知源消息队列提取的该待处理消息已被成功处理,可以将当前存储的该待处理消息删除,从而避免提取待处理消息的同时删除该待处理消息,而该待处理消息未被成功处理的情况,导致该待处理消息丢失,比如在对待处理消息处理过程中突然断电,将会直接导致处理的待处理消息丢失,若此时源消息队列已删除该待处理消息,将无法再对该待处理消息重新处理,从而导致消息不完整。
可见,本实施例在未成功实现对待处理消息的处理之前,源消息队列将会保留该待处理消息,以便重试时能够再次提取到该待处理消息,从而保证消息的完整性。
需要说明,在上述步骤S23中,本实施例可以再次检测处理消息是否成功插入下一个消息队列,确定该处理消息成功插入下一个消息队列,再删除源消息队列中对应的待处理消息,即源消息队列中队头位置的消息。
步骤S24,当待处理消息的处理过程出现异常,获取该异常待处理消息对应的异常信息;
结合上文相应部分的描述,该异常信息可以包括异常原因及处理次数等,本实施例对该异常信息的内容不做限定。其中,该异常原因可以包括所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项导致的处理异常。
步骤S25,判断该异常消息中的处理次数是否达到预设次数,如果是,执行步骤S27;如果否,进入步骤S26;
关于实施例预设的异常待处理消息允许重试的次数的设定,可以参照上述实施例相应部分的描述,本实施例在此不再赘述。
步骤S26,将该异常信息添加到异常待处理消息后,将该异常待处理消息插入源消息队列,以便根据该异常信息中的异常原因再次对该异常待处理消息进行处理;
基于源消息队列的消息插入和提取的特性,对于添加有异常信息的异常处理消息,实际上是从源消息队列的队尾插入,使其能够继续排队等待被再次从队首提取处理。
可见,本实施例对于处理异常的异常待处理消息,不会直接删除,而是携带异常信息回滚至源消息队列,等待再次被提取处理,保证了消息的完整性,且,在此期间,消息处理平台会继续对该源消息队列的下一待处理消息进行处理,即删除队首处的异常待处理消息,由次队首处的待处理消息移至队首位置被提取,保证了其他待处理消息处理的及时性。
其中,本实施例可以确定异常待处理消息成功插入源消息队列后,再删除源消息队列队首的异常待处理消息(也就是上一次插入的异常待处理消息),继续对源消息队列中的下一个待处理消息进行处理。
步骤S27,将携带源消息队列标识的异常待处理消息插入异常消息队列;
如上文描述的重试处理方式,对处理异常的待处理消息重试预设次数后,该待处理消息的处理过程仍会出现异常,本实施例将不再继续对其进行重试,而是构建一异常消息队列,并将该待处理消息插入异常消息队列。其中,发送至异常消息队列的待处理消息通常可以携带对应的源消息队列标识,该源消息队列即为该待处理消息的来源队列,本实施例对该源消息队列标识的具体内容不做限定,其可以用于区分各消息队列。
步骤S28,当该异常消息队列存在异常待处理消息时,输出运维提示信息;
可选的,本实施例可以预先创建异常消息队列,并对该异常消息队列进行监控,确定该异常消息队列出现消息,输出运维提示信息等等,也可以在在确定将携带源消息队列标识的异常待处理消息成功插入异常消息队列后,直接输出相应的运维提示信息,来提醒运维人员分析处理异常,本实施例对如何触发输出运维提示信息的具体触发方式不做限定。
且,对于运维提示信息的输出,服务器可以通过预先绑定运维人员的终端设备输出,也就是说,服务器产生运维提示信息后,直接将其发送至预先绑定的终端设备输出,当然,该运维提示信息也可以直接在服务器的管理界面输出,由监控该管理界面的用户或通知相应的运维人员,分析处理产生异常的原因,以解决该异常情况。
其中,本实施例对运维提示信息的输出形式不作限定,可以是邮件、短信等方式,以文字、语音等形式输出,这可以根据实际情况预先设定,也可以根据需要灵活调整。
另外,上文对处理异常的分析可以包括对异常待处理消息本身的分析,及对用于处理异常待处理消息的消息处理应用的分析,可以由运维人员触发运维启动按钮,从而使预先配置的异常分析处理程序运行,实现对当前异常情况的分析处理,具体过程本实施例不作限定。
在实际应用中,经过上述对异常情况的分析处理,确定异常待处理消息本身没有问题、用于处理异常待处理消息的消息处理应用正常等,导致出现异常情况的因素恢复正常,可以输出相应的异常恢复指令,以便继续对该异常待处理消息进行后续处理步骤,但并不局限于输出异常恢复指令这种方式。
步骤S29,响应异常恢复指令,利用该异常待处理消息携带的源消息队列标识,将异常消息队列中的异常待处理消息插入源消息队列;
继上文描述,运维人员根据输出的运维提示信息,对产生的异常进行分析处理,确定异常待处理消息的处理异常消失,可以响应异常恢复指令,将该异常待处理消息回滚至源消息队列,重新排队等待被处理。
在本实施例中,源消息队列是相对于待处理消息发送端来说的,即其是指保存待处理消息的消息队列,在不同的处理阶段,该源消息队列可以指服务器中的不同消息队列。为了区别各消息队列,在将处理异常的异常待处理消息发送至异常消息队列之前,可以在该异常待处理消息中添加其对应的源消息队列标识,这样,当需要将异常消息队列中的待处理消息发送回其对应的源消息队列,可以基于其携带的源消息队列标识,实现待处理消息的准确发送。
可选的,在本发明实际应用中,运维人员完成针对异常待处理消息的处理后,还可以通过其他方式通知源消息队列,重新对该异常待处理消息进行处理,并不局限于本实施例步骤S29描述的处理方式。
另外,将异常待处理消息插入异常消息队列后,也可以采用其他方式触发运维系统针对该异常待处理消息进行分析处理,之后,按照上述步骤S28描述的方法进行后续处理。
步骤S210,在该异常待处理消息成功插入源消息队列后,继续对源消息队列的下一个待处理消息进行处理。
其中,下一个待处理消息包括插入源消息队列的异常待处理消息。
本实施例的步骤S210具体可以是在携带源消息队列标识的待处理消息成功插入异常消息队列后,或者异常消息队列中的异常待处理消息成功插入源消息队列后,继续对源消息队列的下一个待处理消息进行处理。
基于上文描述,由于本实施例的异常消息队列出现待处理消息,即处理过程中出现异常的待处理消息,就会提示运维人员及时分析异常原因,并进行修正,之后,会及时将异常消息队列中的该异常待处理消息发送回源消息队列,删除异常消息队列中的该异常待处理消息,并继续对源消息队列的下一个待处理消息进行处理。所以说,异常消息队列中通常只能保存一消息,以便通过检测该异常消息队列是否存在消息,来确定是否输出运维提示信息,但并不局限于此。
结合上文实施例对消息处理方法的步骤描述,参照图3a和图3b所示的流程示意图,为了更清楚说明该消息处理方法,本实施例可以将对待处理消息进行处理的应用记为消息处理平台,将源消息队列中存储的消息记为消息1、消息2、…、消息n,n不大于源消息队列能够存储消息的最大数量,本实施例对n的具体数值不做限定,可以根据服务器接收到的消息数量确定。可见,源消息队列的队头位置的消息1可以是上文实施例中的待处理消息,应该理解的是,随着对源消息队列中消息的处理,该源消息队列中的各消息将不断向队头位置推移,也就是说,队头位置的消息1的内容可以不断更新,并不是固定不变的。
当需要对源消息队列中的消息进行处理时,可以将消息1发送至消息处理平台(即消息处理程序),由消息处理平台对消息1进行第一次处理,若在处理过程中出现异常,可以记录异常内容(即出错原因),并将该异常内容及消息1的当前处理次数添加到消息1中,得到消息1’,后,将消息1’回滚至源消息队列的队尾,此时可以将源消息队列中队头位置的消息1删除,之后,可以按照上述方式将源消息队列中的消息2发送至消息处理平台进行处理,在此不再赘述。
待上述消息1’再次推移至队头位置,将消息1’发送至消息处理平台进行第二次处理,若处理过程中仍然出现异常,将中断对消息1’的处理,记录此时异常内容,并更新消息1的处理次数,按照上述方式将异常内容及更新后的处理次数添加到消息1’,得到消息1”,将消息1”回滚至源消息队列继续排队等待,如此循环,若具有消息1内容的消息1n个’第n次被发送至消息处理平台进行处理,即消息1第n次被处理,在处理过程中仍出现异常,此时不再回滚操作,而是将该消息1n个’中的消息1发送至异常消息队列,其中,异常消息队列可以是预先构建的,也可以是在需要时,即消息1第n次处理失败时构建,本实施例对异常消息队列的构建时机不作限定。
如图3a所示,异常消息队列将会插入n次处理过程都出现异常的消息1,此时可以输出运维提示信息,来提醒运维人员分析异常原因,并解决该异常后,通知异常消息队列将存储的消息1发送至源消息队列。需要说明,发送至异常消息队列中的消息携带有源消息队列标识,以使异常消息队列能够将该消息1准确发送回源消息队列。
待异常消息队列成功将消息1发送至源消息队列后,可以删除源消息队列队头位置的消息,即携带有异常内容和处理次数的消息1,以使消息处理平台能够继续对源消息队列中的其他消息进行处理。当然,本实施例也可以在消息1成功插入异常消息队列后,删除此时源消息队列队头位置的消息,本实施例对此不做限定。
综上所述,本实施例在对消息处理过程中出现异常时,会及时捕获异常处理信息,即在消息处理了一部分也会中断,直接执行消息出错后的重试逻辑,即将异常待处理消息回滚至源消息队列,与传统方案需要对消息处理完毕后,才能得知消息是否成功被处理相比,不需要执行完已出现异常后的剩余内容,提高了消息处理效率。
而且,在重试处理步骤中,本实施例并不是由消息处理平台直接对该消息进行重试,而是将其回滚至源消息队列排队等待处理,避免了不断对异常的消息重试,影响其他消息处理的及时性。且在重试n次仍异常时,本实施例不是直接放弃该消息,而是将其发送至异常消息队列,等待运维人员对分析异常原因并修正,之后,再将该消息发送回源消息队列排队等待处理,保证了消息处理的完整性,且提高了消息成功处理的效率。
另外,如图3a所示,在上述首次或重试处理过程中,确定本次处理未出现异常(即处理正常),可以将得到的处理消息发送至下一个消息队列,等待被后续模块提取处理,过程类似,本实施例不再赘述。
参照图4,为本发明实施例提供的一种消息处理装置的结构示意图,该装置可以应用于计算机设备,如服务器,具体可以包括但并不局限于如下功能模块:
消息处理模块41,用于获取源消息队列中的一待处理消息,并对所述待处理消息进行处理;
异常处理消息回滚模块42,用于当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
可选的,如5所示,该装置还可以包括:
异常信息获取模块43,用于获取异常待处理消息对应的异常信息,该异常信息包括异常原因及处理次数;其中,异常原因可以是所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项。
判断模块44,用于判断该处理次数是否达到预设次数;
第一消息插入模块45,用于判断模块44的判断结果为否,将异常信息添加到所述异常待处理消息中,并触发所述异常处理消息回滚模块将异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
由此可见,本实施例在对待处理消息进行处理过程中,出现异常后,将及时中断对异常待处理消息的处理,并在其中添加相应的异常信息后,将该异常处理消息回滚至源消息队列排队等待重新被提取处理,而不是直接对其进行重试处理,避免了多次对该消息进行失败处理,降低对其他消息的处理及时性,提高了其他消息的响应效率,且由于本实施例不会直接将处理异常的消息丢失,保证了消息的完整性。
可选的,在上述实施例的基础上,如图6所示,本发明提供的消息处理装置还可以包括:
第二消息插入模块46,用于当判断模块44的判断结果为是,将携带源消息队列标识的异常待处理消息插入异常消息队列;
其中,源消息队列标识用来指示异常消息队列将该异常待处理消息发送回哪个消息队列,即用来区别各消息队列,提高消息发送准确性,本实施例对该源消息队列标识包含的具体内容不作限定,可以是唯一编码或标识符等。
提示信息输出模块47,用于当述异常消息队列存在异常待处理消息时,输出运维提示信息;
可选的,本实施例还可以包括:
第一消息删除模块,用于确定所述携带源消息队列标识的异常待处理消息成功插入异常消息队列,删除所述源消息队列上一次插入的所述待处理消息;或者,
第二消息删除模块,用于确定所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列,删除所述源消息队列上一次插入的所述待处理消息。
通过上述方式,以使源消息队列不会再次对队头位置的消息重复提取,而是由该消息重新从队尾排队等待处理,从而使得其他位置的消息能够推移至队头位置,进而被提取处理,保证其他消息处理的及时性,即保证其他消息的响应效率。
另外,在本实施例中,对于提示信息输出模块具体如何输出运维提示信息的方式不作限定,参照上述方法实施例相应部分的描述,该提示信息输出模块具体可以是语音模块、显示模块等等,本实施例对运维提示信息的输出方式及输出内容不再赘述。
第三消息插入模块48,用于响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;
待处理消息处理模块49,用于在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理;
其中,下一个待处理消息包括插入源消息队列的异常待处理消息。
本实施例在确定对消息重试多次,处理过程仍会出现异常情况时,采用人工干预的方式,解决导致异常的因素,如人工启动异常分析处理程序,来修正异常,之后,响应异常恢复指令,将异常消息队列中的消息发送回源消息队列,重新排队等待处理,从而保证服务器接收到并存入源消息队列中的各消息,能够可靠得到处理,进而保证消息的完整性及响应效率。
可选的,在上述各实施例的基础上,该装置还可以包括:
处理消息获得模块,用于当所述待处理消息的处理过程未出现异常,得到相应的处理消息;
第四消息插入模块,用于将所述处理消息插入下一个消息队列,以使得下一个消息队列继续对该处理消息进行处理。
可见,本实施例是在确定待处理消息被成功处理后,才会通知源消息队列删除该待处理消息,否则将继续保留该待处理消息,避免了直接删除提取的待处理消息后,发送如断电等意外情况,导致提取的待处理消息丢失后,无法再提取到该待处理消息,进而无法得到完整的消息。
在本实施例中,上述各实施例描述的消息处理装置可以包括处理器和存储器,且上述消息处理模块、异常处理消息回滚模块、异常信息获取模块、判断模块、第一消息插入模块、第二消息插入模块、提示信息输出模块、第三消息插入模块及待处理消息处理模块等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
其中,处理器中可以包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来在对获取的待处理消息处理过程中出现异常时,及时将其回滚至源消息队列排队等待再次被提取处理,从而保证消息的完整性及其他待处理消息处理的及时性。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述方法实施例描述的消息处理方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述消息处理方法。
如图7所示的硬件结构示意图,本发明实施例提供了一种计算机设备,该计算机设备可以包括:通信接口71、存储器72及处理器73,其中:
通信接口71、存储器72及处理器73的数量可以是至少一个,且通信接口71、存储器72及处理器73可以通过通信总线进行相互通信。
通信接口71可以用来接收外部设备发送的消息,比如各种请求消息等,也可以用来向外部设备反馈消息响应结果等等,具体可以根据实际应用场景的需求确定,本实施例在此不作详述。
可选的,该通信接口可以包括有线或无线网络接口,如WIFI网络接口、GPRS网络接口等等,本实施例对该通信接口包含的接口类型不做限定。
存储器72,用于存储实现上所述的消息处理方法的程序;
处理器73,用于加载并执行所述存储器存储的程序,所述程序用于:
获取源消息队列中的一待处理消息,并对所述待处理消息进行处理;
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
可选的,处理器执行程序时还可以实现以下步骤:
获取所述异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断所述处理次数是否达到预设次数;
如果未达到,将所述异常信息添加到所述异常待处理消息中,并执行步骤将所述异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
可选的,处理器执行程序时还可以实现以下步骤:
如果所述异常待处理消息的处理次数达到预设次数,将携带源消息队列标识的异常待处理消息插入异常消息队列。
可选的,处理器执行程序时还可以实现以下步骤:
当所述待处理消息的处理过程未出现异常,得到相应的处理消息;
将所述处理消息插入下一个消息队列,以使得下一个消息队列继续对所述处理消息进行处理。
可选的,处理器执行程序时还可以实现以下步骤:
当所述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
可选的,处理器执行程序时还可以实现以下步骤:
所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项。
在实际应用中,本实施例提供的计算机设备可以是服务器等。
本发明实施例还提供了一种计算机程序产品,当在计算机设备上执行时,适于执行初始化有如下方法步骤的程序:
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
可选的,计算机程序产品执行程序时还可以实现以下步骤:
获取所述异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断所述处理次数是否达到预设次数;
如果未达到,将所述异常信息添加到所述异常待处理消息中,并执行步骤将所述异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
可选的,计算机程序产品执行程序时还可以实现以下步骤:
如果所述异常待处理消息的处理次数达到预设次数,将携带源消息队列标识的异常待处理消息插入异常消息队列。
可选的,计算机程序产品执行程序时还可以实现以下步骤:
当所述待处理消息的处理过程未出现异常,得到相应的处理消息;
将所述处理消息插入下一个消息队列,以使得下一个消息队列继续对所述处理消息进行处理。
可选的,计算机程序产品执行程序时还可以实现以下步骤:
当所述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
可选的,计算机程序产品执行程序时还可以实现以下步骤:
所述待处理消息的处理过程出现异常包括:所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、计算机设备或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置、计算机设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程消息处理设备的处理器以产生一个机器,使得通过计算机或其他可编程消息处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程消息处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、装置、计算机设备或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (10)

1.一种消息处理方法,其特征在于,所述方法包括:
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
2.根据权利要求1所述的方法,其特征在于,在将所述异常待处理消息插入所述源消息队列之前,所述方法还包括:
获取所述异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断所述处理次数是否达到预设次数;
如果未达到,将所述异常信息添加到所述异常待处理消息中,并执行步骤将所述异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
3.根据权利要求2所述的方法,其特征在于,如果所述异常待处理消息的处理次数达到预设次数,所述方法还包括:
将携带源消息队列标识的异常待处理消息插入异常消息队列。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述待处理消息的处理过程未出现异常,得到相应的处理消息;
将所述处理消息插入下一个消息队列,以使得下一个消息队列继续对所述处理消息进行处理。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当所述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述待处理消息的处理过程出现异常,包括:
所述待处理消息的消息内容缺失、消息处理程序运行异常中的至少一项。
7.一种消息处理装置,其特征在于,所述装置包括:
消息处理模块,用于获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
异常处理消息回滚模块,用于当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:异常信息获取模块,用于获取异常待处理消息对应的异常信息,所述异常信息包括异常原因及处理次数;
判断模块,用于判断所述处理次数是否达到预设次数;
第一消息插入模块,用于当所述判断模块判断结果为否,将所述异常信息添加到所述异常待处理消息中,并触发所述异常处理消息回滚模块将异常待处理消息插入所述源消息队列,以便根据所述异常信息中的异常原因再次对所述异常待处理消息进行处理。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第二消息插入模块,用于当所述判断模块的判断结果为是,将携带源消息队列标识的异常待处理消息插入异常消息队列;
提示信息输出模块,用于当述异常消息队列存在异常待处理消息时,输出运维提示信息;和/或,
第三消息插入模块,用于响应异常恢复指令,利用所述异常待处理消息携带的源消息队列标识,将所述异常消息队列中的所述异常待处理消息插入所述源消息队列;和/或,
待处理消息处理模块,用于在所述携带源消息队列标识的异常待处理消息成功插入异常消息队列后,或者,所述异常消息队列中的所述异常待处理消息成功插入所述源消息队列后,继续对所述源消息队列的下一个待处理消息进行处理,所述下一个待处理消息包括插入源消息队列的异常待处理消息。
10.一种计算机设备,其特征在于,所述计算机设备包括:
通信接口;
存储器,用于存储实现如权利要求1~5任意一项所述的消息处理方法的程序;
处理器,用于加载并执行所述存储器存储的程序,所述程序用于:
获取源消息队列中的待处理消息,并对所述待处理消息进行处理;
当所述待处理消息的处理过程出现异常,将异常待处理消息插入所述源消息队列,继续对所述源消息队列中的下一个待处理消息进行处理。
CN201811130280.2A 2018-09-27 2018-09-27 消息处理方法、装置及计算机设备 Pending CN110955532A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811130280.2A CN110955532A (zh) 2018-09-27 2018-09-27 消息处理方法、装置及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811130280.2A CN110955532A (zh) 2018-09-27 2018-09-27 消息处理方法、装置及计算机设备

Publications (1)

Publication Number Publication Date
CN110955532A true CN110955532A (zh) 2020-04-03

Family

ID=69967838

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811130280.2A Pending CN110955532A (zh) 2018-09-27 2018-09-27 消息处理方法、装置及计算机设备

Country Status (1)

Country Link
CN (1) CN110955532A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112631807A (zh) * 2020-12-29 2021-04-09 杭州趣链科技有限公司 消息管理方法、装置、存储介质及计算机设备
CN112988417A (zh) * 2021-03-04 2021-06-18 长沙市到家悠享网络科技有限公司 消息处理方法、装置、电子设备及计算机可读介质
CN113448981A (zh) * 2021-06-24 2021-09-28 未鲲(上海)科技服务有限公司 一种数据显示方法、装置、电子设备和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956714A (en) * 1997-08-13 1999-09-21 Southwestern Bell Telephone Company Queuing system using a relational database
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
US20110258628A1 (en) * 2010-04-15 2011-10-20 Salesforce.Com, Inc. System, method and computer program product for transporting a task to a handler, utilizing a queue
CN105159657A (zh) * 2015-06-12 2015-12-16 北京京东尚科信息技术有限公司 处理消息的方法和系统
CN106970846A (zh) * 2017-03-15 2017-07-21 北京驰波信息工程有限公司 支付系统消息控制和处理方法、装置
CN107908494A (zh) * 2017-11-10 2018-04-13 泰康保险集团股份有限公司 异常事件的处理方法、装置、电子设备及存储介质
CN108093077A (zh) * 2017-12-29 2018-05-29 广东欧珀移动通信有限公司 异常处理方法、装置以及服务器

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956714A (en) * 1997-08-13 1999-09-21 Southwestern Bell Telephone Company Queuing system using a relational database
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
US20110258628A1 (en) * 2010-04-15 2011-10-20 Salesforce.Com, Inc. System, method and computer program product for transporting a task to a handler, utilizing a queue
CN105159657A (zh) * 2015-06-12 2015-12-16 北京京东尚科信息技术有限公司 处理消息的方法和系统
CN106970846A (zh) * 2017-03-15 2017-07-21 北京驰波信息工程有限公司 支付系统消息控制和处理方法、装置
CN107908494A (zh) * 2017-11-10 2018-04-13 泰康保险集团股份有限公司 异常事件的处理方法、装置、电子设备及存储介质
CN108093077A (zh) * 2017-12-29 2018-05-29 广东欧珀移动通信有限公司 异常处理方法、装置以及服务器

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112631807A (zh) * 2020-12-29 2021-04-09 杭州趣链科技有限公司 消息管理方法、装置、存储介质及计算机设备
CN112988417A (zh) * 2021-03-04 2021-06-18 长沙市到家悠享网络科技有限公司 消息处理方法、装置、电子设备及计算机可读介质
CN113448981A (zh) * 2021-06-24 2021-09-28 未鲲(上海)科技服务有限公司 一种数据显示方法、装置、电子设备和存储介质

Similar Documents

Publication Publication Date Title
CN113238913B (zh) 服务器故障智能推送方法、装置、设备及存储介质
CN110661659B (zh) 一种告警方法、装置、系统及电子设备
CN110955532A (zh) 消息处理方法、装置及计算机设备
EP3258396A1 (en) Data synchronization method, device and system
CN109710394A (zh) 定时任务处理系统及方法
CN107391269B (zh) 一种用于通过持久化队列处理消息的方法与设备
CN108564463B (zh) 一种银行异常交易冲正方法及系统
CN112486913B (zh) 一种基于集群环境下的日志异步存储方法和设备
CN105471714A (zh) 一种消息处理的方法和装置
CN109522273B (zh) 一种实现数据写入的方法及装置
CN110806960A (zh) 信息处理方法、装置及终端设备
CN112131286A (zh) 一种基于时间序列的数据处理方法、装置及存储介质
CN109428682B (zh) 一种消息处理确认方法及装置
CN112422404B (zh) 消息处理方法及系统
CN111831954B (zh) 内容数据更新方法、装置、计算机设备及存储介质
CN112328602A (zh) 一种数据写入Kafka的方法、装置及设备
CN114996098B (zh) 一种异常处理方法及装置
CN110300153B (zh) 与MySQL建立链接的方法、装置、代理服务器及存储介质
CN113656374A (zh) 带有附件的业务报文的处理方法及装置
CN110119400B (zh) 适用于逻辑运算的唯一标识生成方法及装置
CN107562889B (zh) 一种元数据老化方法及装置
CN111367723A (zh) 一种基于反射机制的自动重试装置及方法
CN112527521B (zh) 消息处理方法及设备
US11941432B2 (en) Processing system, processing method, higher-level system, lower-level system, higher-level program, and lower-level program
US11983064B2 (en) Abnormality detection apparatus, control method, and program

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200403