一种消息处理方法和系统的制作方法

文档序号:10569966阅读:340来源:国知局
一种消息处理方法和系统的制作方法
【专利摘要】本发明涉及一种消息处理方法和系统,所述方法包括:S1,接收多个外部接口并发的消息请求;S2,逐个根据消息请求的ID计算散列值;S3,将相同散列值的消息请求发送给线程池中的同一个数据处理线程处理。本发明一种消息处理方法和系统,通过接收多个外部接口并发的消息请求,然后逐个根据消息请求的ID计算散列值,最后根据散列值将具有相同散列值的消息请求发送给线程池中的同一个数据处理线程,从而保证同一消息ID的存储操作以一致的顺序导致数据库,保证了数据的一致性。
【专利说明】
一种消息处理方法和系统
技术领域
[0001]本发明涉及计算机软件领域,具体涉及一种消息处理方法和系统。
【背景技术】
[0002]现代企业IT系统中,越来越普及的使用消息中间件作为各子系统间的松耦合的数据交互,但与普通场景中的消息中间件应用有所区别的是:要求消息传递做到最大可能性的可靠性。
[0003]现有技术在消息中间件的内部处理中,为了保证消息的处理顺序以及优先级、分组等条件在处理上的一致性,单个消息主题的处理是以单线程模式进行的,外部的消息收发处理过程在并发到达时需要排队等候。为了保证数据一致性,处理消息的单线程需要在每次收发消息的处理中,同步保存到数据库中后才返回结果给外部接口,因此,数据库操作是处于串行的单线程处理过程中,这个过程严重影响单个主题的消息吞吐量。
[0004]但如果单纯的把数据库存储操作并发进行,可能出现消费消息的更新状态的操作限于生产消息保存操作到达,而导致更新操作失败,进而导致最终数据的不一致:在库中是未消费状态而实际上是已消费。
[0005]综上所述,现有技术存在:数据的存储操作并发性低,且数据的一致性不能保证,以及主题消息的处理效率低。

【发明内容】

[0006]本发明所要解决的技术问题是提供一种消息处理方法和系统,能够保证数据的一致性。
[0007]本发明解决上述技术问题的技术方案如下:一种消息处理方法,包括:
[0008]SI,接收来自多个外部接口并发的消息请求;
[0009]S2,逐个根据消息请求的ID计算散列值;
[0010]S3,将相同散列值的消息请求发送给线程池中的同一个数据处理线程处理。
[0011]本发明的有益效果是:通过接收外部消费者并发的消息请求,然后逐个根据消息请求的ID计算散列值,最后根据散列值将具有相同散列值的消息请求发送给线程池中的同一个数据处理线程,从而保证同一消息ID的存储操作以一致的顺序导致数据库,保证了数据的一致性。
[0012]在上述技术方案的基础上,本发明还可以做如下改进:
[0013]进一步,所述步骤SI之前还包括:在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。
[0014]采用上述进一步方案的有益效果是:通过在数据库中预分配多个数据处理线程,并给多个数据处理线程进行编号,从而保证了消息传递的一致性,即具有相同ID的消息被同一个数据处理线程处理。
[0015]进一步,所述步骤S3还包括:当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。
[0016]进一步,所述步骤S3还包括:当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0017]进一步,所述步骤S3为:
[0018]S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号;
[0019]S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号;
[0020]S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0021]本发明解决上述技术问题的另一种技术方案如下:一种消息处理系统,包括:
[0022]接收模块,用于接收多个外部接口并发的消息请求;
[0023]计算模块,用于逐个根据消息请求的ID计算散列值;
[0024]发送模块,用于将相同散列值的消息请求发送给线程池中的同一个数据处理线程。
[0025]本发明的有益效果是:通过接收模块接收外部消费者并发的消息请求,然后由计算模块逐个根据消息请求的ID计算散列值,最后由发送模块根据散列值将具有相同散列值的消息请求发送给线程池中的同一个数据处理线程,从而保证同一消息ID的存储操作以一致的顺序导致数据库,保证了数据的一致性。
[0026]在上述技术方案的基础上,本发明还可以做如下改进:
[0027]进一步,还包括预分配模块:在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。
[0028]采用上述进一步方案的有益效果是:通过预分配模块在数据库中预分配多个数据处理线程,并给多个数据处理线程进行编号,从而保证了消息传递的一致性,即具有相同ID的消息被同一个数据处理线程处理。
[0029]进一步,所述发送模块包括第一发送单元,用于当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。
[0030]进一步,所述发送模块还包括第二发送单元,用于当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0031]进一步,所述发送模块还用于,所述数据处理线程在处理完消息请求后,所述发送模块具体按照以下方法实施:
[0032]S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号;
[0033]S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号;
[0034]S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
【附图说明】
[0035]图1为本发明一种消息处理方法的流程示意图;
[0036]图2为本发明一种消息处理系统的结构示意图。
【具体实施方式】
[0037]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0038]如图1所示,一种消息处理方法,包括:
[0039]S0,在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。
[0040]SI,接收多个外部接口并发的消息请求;
[0041]S2,逐个根据消息请求的ID计算散列值;
[0042]S3,将相同散列值的消息请求发送给线程池中的同一个数据处理线程处理。
[0043]步骤S3还包括:当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。
[0044]步骤S3还包括:当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0045]所述数据处理线程在处理完消息请求后,保存处理结果,并将处理结果返回给外部接口。
[0046]步骤S3中具体为:
[0047]S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号;
[0048]S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号;
[0049]S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数取整,将所述消息请求发送至线程池中对应的数据处理线程。
[0050]如图2所示,一种消息处理系统,包括:
[0051]接收模块,用于接收外部消费者并发的消息请求;
[0052]计算模块,用于逐个根据消息请求的ID计算散列值;
[0053]发送模块,用于将相同散列值的消息请求发送给线程池中的同一个数据处理线程。
[0054]还包括预分配模块:在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。
[0055]发送模块包括第一发送单元,用于当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。
[0056]发送模块还包括第二发送单元,用于当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0057]发送模块还用于,所述数据处理线程在处理完消息请求后,将结果保存后再返回给外部请求者。
[0058]所述发送模块具体按照以下方法实施:
[0059]S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号;
[0060]S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号;
[0061]S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
[0062]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种消息处理方法,其特征在于,包括: Si,接收来自多个外部接口并发的消息请求; S2,逐个根据消息请求的ID计算散列值; S3,将相同散列值的消息请求发送给线程池中的同一个数据处理线程处理。2.根据权利要求1所述一种消息处理方法,其特征在于,所述步骤SI之前还包括:在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。3.根据权利要求2所述一种消息处理方法,其特征在于,所述步骤S3还包括:当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。4.根据权利要求3所述一种消息处理方法,其特征在于,所述步骤S3还包括:当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。5.根据权利要求1所述一种消息处理方法,其特征在于,所述步骤S3还包括: S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号; S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号; S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。6.一种消息处理系统,其特征在于,包括: 接收模块,用于接收来自多个外部接口并发的消息请求; 消息处理模块,用于逐个根据消息请求的ID计算散列值; 发送模块,用于将相同散列值的消息请求发送给线程池中的同一个数据处理线程。7.根据权利要求6所述一种消息处理系统,其特征在于,还包括预分配模块:在数据库中预分配多个数据处理线程,并给所述多个数据处理线程进行编号。8.根据权利要求7所述一种消息处理系统,其特征在于,所述发送模块包括第一发送单元,用于当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程。9.根据权利要求8所述一种消息处理系统,其特征在于,所述发送模块还包括第二发送单元,用于当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。10.根据权利要求6所述一种消息处理系统,其特征在于,所述发送模块具体按照以下方法实施: S31,将具有相同散列值的消息请求随机发送给任一个数据处理线程,并将所述散列值作为所述数据处理线程的编号; S32,比较下一组具有相同散列值的消息请求与已编号的数据处理线程是否相同,若相同,则将所述消息请求发送给所述已编号的数据线程;若不相同,则将所述散列值作为未编号的任一个数据处理线程的编号; S33,继续执行步骤S32,当所有的数据处理线程都已编号后,则判断所述消息请求的散列值是否在数据处理线程的编号范围内,当消息请求的散列值在数据处理线程的编号范围内时,则将所述消息请求按照散列值发送给对应的数据处理线程;当消息请求的散列值不在数据处理线程的编号范围内时,则按照所述消息请求的散列值与所述数据处理线程的最大编号值的余数将所述消息请求发送至线程池中对应的数据处理线程。
【文档编号】G06F17/30GK105930397SQ201610236973
【公开日】2016年9月7日
【申请日】2016年4月15日
【发明人】官元峰
【申请人】北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1