基于消息队列的数据处理方法、系统及服务器技术方案

技术编号:27494323 阅读:16 留言:0更新日期:2021-03-02 18:14
本发明专利技术实施例提供一种基于消息队列的数据处理方法、系统及服务器,属于通信技术领域。其中,方法包括解析从消息队列获取的目标消息的目标关键字段和目标消息序列号,并从缓存服务器获取与目标关键字段对应的最大消息序列号;根据所述最大消息序列号与所述目标消息序列号的大小关系、以及所述缓存服务器中是否存储有目标消息处理中标记位,判断是否消费所述目标消息;当目标消息消费成功时,以目标消息序列号更新缓存服务器存储的最大消息序列号。采用本发明专利技术能够在保证数据一致性的前提下保证同一条消息只被消费一次。证同一条消息只被消费一次。证同一条消息只被消费一次。

【技术实现步骤摘要】
基于消息队列的数据处理方法、系统及服务器


[0001]本专利技术涉及通信
,特别涉及一种基于消息队列的数据处理方法、系统及服务器。

技术介绍

[0002]业务组件之间采用同步通信模式时,交互效率低下。例如,请求端向服务端发送业务请求后,需要同步等待服务端返回业务响应,浪费空闲计算资源。并且,各个请求端与服务端直接通信,当流量大量并发时,服务端资源调度频繁造成服务端有效的资源利用率低,进而导致服务端处理效率低、响应速度慢。
[0003]为了保证了业务系统的高可用和高性能,可以将请求端与服务端之间的同步通信模式改为异步通信模式。并且,为了缓解流量大量并发时的服务端处理压力,可以在请求端与服务端之间增加消息队列(Message Queue,MQ),以使服务端从消息队列中分批获取业务请求以对并发流量进行削峰。
[0004]本专利申请的专利技术人通过研究请求端、消息队列以及服务端之间的通信过程发现,现有技术至少存在以下问题:在请求端(可称作生产者,Producer)与服务端(可称作消费者,Consumer)之间增加消息队列降低了消息(Message)传输的可靠性。为了克服消息在从生产者到消息队列的传输途中出现异常、以及在消息队列处出现异常等情况,生产者可以向消息队列重复发送同一消息。同理,为了克服消息在从消息队列到消费者的传输途中出现异常、以及在消费者处出现异常等情况,消息队列可以重复向消费者提供同一消息。这样可能导致同一消息被重复消费以及消费者处理失效消息后引发数据不一致问题。

技术实现思路
r/>[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]将所述目标消息存放至等待队列,以使所述消费端从所述等待队列中获取并再次判断是否消费所述目标消息。
[00本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于消息队列的数据处理方法,应用于消费端,其特征在于,所述方法包括:解析从消息队列获取的目标消息的目标关键字段和目标消息序列号,并从缓存服务器获取与所述目标关键字段对应的最大消息序列号;其中,所述目标消息序列号为具有时序的识别码;根据所述最大消息序列号与所述目标消息序列号的大小关系、以及所述缓存服务器中是否存储有目标消息处理中标记位,判断是否消费所述目标消息;当所述目标消息消费成功时,以所述目标消息序列号更新所述缓存服务器存储的所述最大消息序列号。2.如权利要求1所述的方法,其特征在于,根据所述最大消息序列号与所述目标消息序列号的大小关系、以及所述缓存服务器中是否存储有目标消息处理中标记位,判断是否消费所述目标消息包括:若所述最大消息序列号小于所述目标消息序列号且所述缓存服务器中不存在所述目标消息处理中标记位,则在所述缓存服务器中记录所述目标消息处理中标记位,并消费所述目标消息;若所述最大消息序列号不小于所述目标消息序列号,或所述最大消息序列号小于所述目标消息序列号且所述缓存服务器中存在目标消息处理中标记位,则忽略所述目标消息。3.如权利要求1所述的方法,其特征在于,所述解析从消息队列获取的目标消息的目标关键字段和目标消息序列号之前,所述方法还包括:从消息队列获取目标批次消息,并查询所述缓存服务器是否存在目标批次处理中标记位;其中,所述目标批次消息包含所述目标消息;若存在,则丢弃所述目标批次消息;若不存在,则在所述缓存服务器中记录所述目标批次处理中标记位。4.如权利要求3所述的方法,其特征在于,所述从消息队列获取目标批次消息包括从所述消息队列中拉取所述目标批次消息或者接收由所述消息队列推送的所述目标批次消息;从所述消息队列拉取到所述目标批次消息之后,所述方法还包括:在缓存服务器中记录所述目标批次消息的最大下标值,以根据所述最大下标值拉取下一批次的消息;接收到所述消息队列推送的所述目标批次消息之后,所述方法还包括:向所述消息队列回复成功接收响应,并由所述消息队列在缓存服务器中记录所述目标批次消息的最大下标值,以使所述消息队列根据所述最大下标值推送下一批次的消息。5.如权利要求1所述的方法,其特征在于,所述方法还包括:当所述目标消息消费成功时,删除所述目标消息处理中标记位;若所述目标消息处理中标记位在所述缓存服务器中存储时间超过第一预设时长,则触发告警。6.如权利要求1所述的方法,其特征在于,所述方法还包括:当所述目标消息消费失败时,...

【专利技术属性】
技术研发人员:张俊
申请(专利权)人:网宿科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1