消息队列事务消息的处理方法和装置制造方法及图纸

技术编号:38685433 阅读:11 留言:0更新日期:2023-09-02 22:58
本申请提供一种消息队列事务消息的处理方法和装置,涉及消息传输技术领域。该方法包括:根据第一设备发送的全局事务消息,生成第一全局事务标识,并将第一全局事务标识发送至第一设备;全局事务消息包括本地事务和发送消息的事务;获取第一设备发送的第一指示信息;第一指示信息中携带有第二全局事务标识,第一指示信息用于指示第一设备执行本地事务后的状态;根据第二全局事务标识,在执行发送消息的事务后生成第二指示信息,并向第一设备发送第二指示信息;第二指示信息用于指示消息队列MQ代理模块执行发送消息的事务后的状态。本申请的方案,在用户使用任何一种消息队列,完全不依赖消息队列的事务消息机制。不依赖消息队列的事务消息机制。不依赖消息队列的事务消息机制。

【技术实现步骤摘要】
消息队列事务消息的处理方法和装置


[0001]本申请涉及消息传输
,特别是指一种消息队列事务消息的处理方法和装置。

技术介绍

[0002]在分布式系统中使用消息队列,本地事务的执行和发送消息满足事务的约束是非常关键的要求。传统分布式环境下为了保证数据的一致性,一般是在本地数据库中增加一张事件记录表。随本地事务一起生成事件记录。本地事务完成后,异步发送事件到其它服务,其它服务接收到事件消息后,完成业务。也就是,对数据一致性要求较高的前提下,本地事务的执行和发送消息的事务都需要设计事务的约束条件。
[0003]为了实现本地事务的执行和发消息满足事务的约束,现有技术大多采用RocketMQ消息队列或QMQ消息队列。然而,RocketMQ消息队列要求使用方必须发送具有RocketMQ特殊标记的事务消息,并且实现事务监听器供RocketMQ回查本地事务状态,若使用方还使用了Kafka或ActiveMQ等其他消息队列,则无法使用RocketMQ消息队列来实现本地事务的执行和发消息满足事务的约束。QMQ消息队列要求使用方本地操作必须与QMQ的数据库在一个数据库(database,DB)实例上,且本地工程需要新启动定时任务,并保证定时任务的单例执行,该方式对业务DB和代码的侵入比较大。

技术实现思路

[0004]本申请的目的是提供一种消息队列事务消息的处理方法和装置,能够在用户使用任何一种消息队列,完全不依赖消息队列的事务消息机制,且对业务DB和代码几乎无侵入的情况下,保证本地事务的执行和发消息这两个动作具有事务的约束。
[0005]为达到上述目的,本申请的实施例提供一种消息队列事务消息的处理方法,包括:
[0006]根据第一设备发送的全局事务消息,生成第一全局事务标识,并将所述第一全局事务标识发送至所述第一设备;所述全局事务消息包括本地事务和发送消息的事务;
[0007]获取所述第一设备发送的第一指示信息;所述第一指示信息中携带有第二全局事务标识,所述第一指示信息用于指示所述第一设备执行本地事务后的状态;
[0008]根据所述第二全局事务标识,在执行所述发送消息的事务后生成第二指示信息,并向所述第一设备发送所述第二指示信息;所述第二指示信息用于指示消息队列MQ代理模块执行所述发送消息的事务后的状态。
[0009]可选地,根据第一设备发送的全局事务消息,生成第一全局事务标识,包括:
[0010]根据第一设备发送的全局事务消息,向MQ代理数据库中的第一预设事务表中保存所述全局事务消息;所述第一预设事务表至少包括主键信息和全局事务状态信息;
[0011]将保存所述全局事务消息中确定的所述主键信息,作为第一全局事务标识。
[0012]可选地,根据所述第二全局事务标识,在执行所述发送消息的事务后生成第二指示信息,包括:
[0013]根据所述第二全局事务标识,所述MQ代理模块开启所述发送消息的事务,并执行第一预设流程;所述第一预设流程为所述MQ代理模块保存消息与更新全局事务状态需要执行的操作;
[0014]所述MQ代理模块在执行所述发送消息的事务后,生成所述第二指示信息。
[0015]可选地,在执行所述发送消息的事务后生成第二指示信息后,所述方法还包括:
[0016]根据所述第一指示信息和所述第二指示信息,确定所述第一设备执行本地事务的第一执行结果,以及所述MQ代理模块执行所述发送消息的事务的第二执行结果;
[0017]在所述第一执行结果和所述第二执行结果均为执行成功时,向MQ代理数据库执行提交操作;
[0018]在所述第一执行结果和所述第二执行结果中至少一项执行失败时,对执行失败对应的事务执行回滚操作。
[0019]可选地,向所述MQ代理数据库执行提交操作后,所述方法还包括:
[0020]扫描MQ代理数据库未发送的目标消息,异步向MQ发送目标消息,并异步删除已经发送成功的所述目标消息。
[0021]可选地,异步向MQ发送目标消息后,上述方法还包括:
[0022]扫描所述全局事务消息中的超时事务;
[0023]向MQ代理监视模块发送告警信息;所述MQ代理监视模块用于根据所述告警信息查看所述全局事务消息所对应的全局事务状态;
[0024]其中,所述超时全局事务的超时时长为所述MQ代理模块配置或预配置的。
[0025]可选地,所述MQ代理模块执行所述发送消息的事务时,还包括:
[0026]向所述MQ代理数据库的第二预设事务表插入所述发送消息的事务所对应的消息;
[0027]其中,所述发送消息的事务所对应的消息至少包括:消息标识、全局事务标识、第一预设事务表的主键信息和消息内容。
[0028]为达到上述目的,本申请的实施例提供一种消息队列事务消息的处理方法,包括:
[0029]向消息队列MQ代理模块发送全局事务消息,并接收所述全局事务消息发送的第一全局事务标识;所述全局事务消息包括本地事务和发送消息的事务;
[0030]向所述MQ代理模块发送第一指示信息;所述第一指示信息中携带有第二全局事务标识,所述第一指示信息用于指示第一设备执行本地事务后的状态;
[0031]接收所述MQ代理模块发送的第二指示信息;所述第二指示信息用于指示消息队列MQ代理模块执行所述发送消息的事务后的状态;
[0032]根据所述第一指示信息和所述第二指示信息,向第一设备数据库执行提交或回滚操作。
[0033]可选地,上述的方法还包括:
[0034]根据所述第一全局事务标识,所述第一设备开启所述本地事务,并执行第二预设流程;所述第二预设流程为所述第一设备执行所述本地事务需要执行的操作;
[0035]所述第一设备执行所述本地事务成功后,生成所述第一指示信息。
[0036]可选地,根据所述第一指示信息和所述第二指示信息,向第一设备数据库执行提交或回滚操作,包括:
[0037]根据所述第一指示信息和所述第二指示信息,确定所述第一设备执行本地事务的
第一执行结果,以及所述MQ代理模块执行所述发送消息的事务的第二执行结果;
[0038]在所述第一执行结果和所述第二执行结果均为执行成功时,向所述第一设备数据库执行提交操作;
[0039]在所述第一执行结果和所述第二执行结果中至少一项执行失败时,对执行失败对应的事务执行回滚操作。
[0040]为达到上述目的,本申请的实施例提供一种消息队列事务消息的处理装置,包括:
[0041]第一处理模块,用于根据第一设备发送的全局事务消息,生成第一全局事务标识,并将所述第一全局事务标识发送至所述第一设备;所述全局事务消息包括本地事务和发送消息的事务;
[0042]第一获取模块,用于获取所述第一设备发送的第一指示信息;所述第一指示信息中携带有第二全局事务标识,所述第一指示信息用于指示所述第一设备执行本地事务后的状态;
[0043]第二处理模块,用于本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种消息队列事务消息的处理方法,其特征在于,包括:根据第一设备发送的全局事务消息,生成第一全局事务标识,并将所述第一全局事务标识发送至所述第一设备;所述全局事务消息包括本地事务和发送消息的事务;获取所述第一设备发送的第一指示信息;所述第一指示信息中携带有第二全局事务标识,所述第一指示信息用于指示所述第一设备执行本地事务后的状态;根据所述第二全局事务标识,在执行所述发送消息的事务后生成第二指示信息,并向所述第一设备发送所述第二指示信息;所述第二指示信息用于指示消息队列MQ代理模块执行所述发送消息的事务后的状态。2.根据权利要求1所述的方法,其特征在于,根据第一设备发送的全局事务消息,生成第一全局事务标识,包括:根据第一设备发送的全局事务消息,向MQ代理数据库中的第一预设事务表中保存所述全局事务消息;所述第一预设事务表至少包括主键信息和全局事务状态信息;将保存所述全局事务消息中确定的所述主键信息,作为第一全局事务标识。3.根据权利要求1所述的方法,其特征在于,根据所述第二全局事务标识,在执行所述发送消息的事务后生成第二指示信息,包括:根据所述第二全局事务标识,所述MQ代理模块开启所述发送消息的事务,并执行第一预设流程;所述第一预设流程为所述MQ代理模块保存消息与更新全局事务状态需要执行的操作;所述MQ代理模块在执行所述发送消息的事务后,生成所述第二指示信息。4.根据权利要求1所述的方法,其特征在于,在执行所述发送消息的事务后生成第二指示信息后,所述方法还包括:根据所述第一指示信息和所述第二指示信息,确定所述第一设备执行本地事务的第一执行结果,以及所述MQ代理模块执行所述发送消息的事务的第二执行结果;在所述第一执行结果和所述第二执行结果均为执行成功时,向MQ代理数据库执行提交操作;在所述第一执行结果和所述第二执行结果中至少一项执行失败时,对执行失败对应的事务执行回滚操作。5.根据权利要求4所述的方法,其特征在于,向所述MQ代理数据库执行提交操作后,所述方法还包括:扫描MQ代理数据库未发送的目标消息,异步向MQ发送目标消息,并异步删除已经发送成功的所述目标消息。6.根据权利要求5所述的方法,其特征在于,异步向MQ发送目标消息后,所述方法还包括:扫描所述全局事务消息中的超时事务;向MQ代理监视模块发送告警信息;所述MQ代理监视模块用于根据所述告警信息查看所述全局事务消息所对应的全局事务状态;其中,所述超时全局事务的超时时长为所述MQ代理模块配置或预配置的。7.根据权利要求1所述的方法,其特征在于,所述MQ代理模块执行所述发送消息的事务时,还包括:
向所述MQ代理数据库的第二预设事务表插入所述发送消息的事务所对应的消息;其中,所述发送消息的事务所对应的消息至少包括:消息标识、全局事务标识、第一预设事务表的主键信息和消息内容。8.一种消息...

【专利技术属性】
技术研发人员:丁修正
申请(专利权)人:中国移动通信集团有限公司
类型:发明
国别省市:

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

1