一种基于RabbitMQ的分布式事务处理方法
文献发布时间:2023-06-19 09:26:02
技术领域
本发明涉及通信领域,尤其涉及一种基于RabbitMQ的分布式事务处理方法。
背景技术
目前对消息的推送常常采用的是RocketMQ队列,RocketMQ队列是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点,但是没有开源,无法做到业务解耦,有可能因为消息发送失败陷入死循环。
因此,需要设计一种能够将消息准确有序发出的分布式事务处理方法成为亟待解决的问题。
发明内容
本发明提供了一种基于RabbitMQ的分布式事务处理方法,以解决现有技术的不足。
第一方面,本发明提供了一种基于RabbitMQ的分布式事务处理方法,该方法包括:
将消息插入到MySQL中;
对消息进行序列标识,得到序列标识信息;
将序列标识信息发送至RabbitMQ队列中;
获取RabbitMQ队列中的序列标识信息;
推送从RabbitMQ队列中获取的序列标识信息。
可选择地,将消息插入到MySQL中之后还包括:
判断消息的业务正确性,若正确,则对消息进行序列标识,得到序列标识信息;反之,则删除消息。
可选择地,判断消息的业务正确性包括:
获取业务数据和前序消息;
将消息分别与业务数据、前序消息进行校验,以判断消息的业务正确性。
可选择地,获取RabbitMQ队列中的序列标识信息之后还包括:
将RabbitMQ队列中的序列标识信息记录到MySQL中。
可选择地,将RabbitMQ队列中的序列标识信息记录到MySQL中之后还包括:
判断RabbitMQ队列中的序列标识信息是否符合预设序列标识,若满足,则推送从RabbitMQ队列中获取的序列标识信息;反之,则从MySQL中进行定时补发。
可选择地,推送从RabbitMQ队列中获取的序列标识信息之后还包括:
判断是否推送成功,若失败,则定时补退失败的推送。
可选择地,将消息插入到MySQL中之前还包括:
调用业务接口。
第二方面,本发明提供一种计算机装置,包括处理器,所述处理器用于执行存储器中存储的计算机程序实现如第一方面任一的所述一种基于RabbitMQ的分布式事务处理方法。
第三方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,处理器用于执行存储介质中存储的计算机程序实现如第一方面任一的所述一种基于RabbitMQ的分布式事务处理方法。
由以上技术方案可知,本发明提供了一种基于RabbitMQ的分布式事务处理方法,该方法包括:将消息插入到MySQL中;对消息进行序列标识,得到序列标识信息;将序列标识信息发送至RabbitMQ队列中;获取RabbitMQ队列中的序列标识信息;推送从RabbitMQ队列中获取的序列标识信息。该方法通过对消息进行序列标识,得到序列标识信息,然后将序列标识信息发送至RabbitMQ队列中,实现了对消息的有序推送,方便业务解耦,不因为消息发送失败陷入死循环。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1,为本发明提供的第一方面一种基于RabbitMQ的分布式事务处理方法的流程图。
具体实施方式
下面结合本发明中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于再次描述的其他方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
本发明解决了RocketMQ队列没有开源,无法做到业务解耦,有可能因为消息发送失败陷入死循环的问题。本发明提供了一种基于RabbitMQ的分布式事务处理方法,该方法包括:将消息插入到MySQL中;对消息进行序列标识,得到序列标识信息;将序列标识信息发送至RabbitMQ队列中;获取RabbitMQ队列中的序列标识信息;推送从RabbitMQ队列中获取的序列标识信息。该方法通过对消息进行序列标识,得到序列标识信息,然后将序列标识信息发送至RabbitMQ队列中,实现了对消息的有序推送,方便业务解耦,不因为消息发送失败陷入死循环。
实施例1:
参见图1,为本发明提供的一种基于RabbitMQ的分布式事务处理方法的流程图。本发明提供了一种基于RabbitMQ的分布式事务处理方法,该方法包括:
S101,将消息插入到MySQL中;
上述将消息插入到MySQL中时,需要保证单机单服务的场景下有事务,即使用MySQL在InnoDB引擎下操作数据。
InnoDB给MySQL提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrencycontrol)的事务安全(transaction-safe(ACID compliant))型表。
S102,对消息进行序列标识,得到序列标识信息;
对MySQL中的消息进行序列标识,是为了能够有序的将消息推送出。
S103,将序列标识信息发送至RabbitMQ队列中;
发送序列标识信息与上述单机单服务之间是无法保证一致的,因此需要在单机单服务内提前存储消息到MySQL内,这样即使序列标识信息发送时发生故障,仍然可以从数据库提取出消息做补发操作。
S104,获取RabbitMQ队列中的序列标识信息;
S105,推送从RabbitMQ队列中获取的序列标识信息。
可选择地,将消息插入到MySQL中之后还包括:
判断消息的业务正确性,若正确,则对消息进行序列标识,得到序列标识信息;反之,则删除消息。
校验消息的业务正确性,是为了保证了消息的发送顺序;
可选择地,判断消息的业务正确性包括:
获取业务数据和前序消息;
将消息分别与业务数据、前序消息进行校验,以判断消息的业务正确性。
可选择地,获取RabbitMQ队列中的序列标识信息之后还包括:
将RabbitMQ队列中的序列标识信息记录到MySQL中。
可选择地,将RabbitMQ队列中的序列标识信息记录到MySQL中之后还包括:
判断RabbitMQ队列中的序列标识信息是否符合预设序列标识,若满足,则推送从RabbitMQ队列中获取的序列标识信息;反之,则从MySQL中进行定时补发。
可选择地,推送从RabbitMQ队列中获取的序列标识信息之后还包括:
判断是否推送成功,若失败,则定时补退失败的推送。
可选择地,将消息插入到MySQL中之前还包括:
调用业务接口。
实施例2:
一种基于RabbitMQ的分布式事务处理系统,该基于RabbitMQ的分布式事务处理系统包括存储模块、序列标识模块、信息发送模块、信息获取模块和推送模块,其中:
存储模块,用于将消息插入到MySQL中;
序列标识模块,用于对消息进行序列标识,得到序列标识信息;
信息发送模块,用于将序列标识信息发送至RabbitMQ队列中:
信息获取模块,用于获取RabbitMQ队列中的序列标识信息;
推送模块,用于推送从RabbitMQ队列中获取的序列标识信息。
该基于RabbitMQ的分布式事务处理系统还包括业务正确性判断模块、:
业务正确性判断模块,用于在将消息插入到MySQL中之后判断消息的业务正确性,若正确,则对消息进行序列标识,得到序列标识信息;反之,则删除消息。
实施例3:
本发明提供一种计算机装置,包括处理器,所述处理器用于执行存储器中存储的计算机程序实现如第一方面任一的所述一种基于RabbitMQ的分布式事务处理方法:
将消息插入到MySQL中;对消息进行序列标识,得到序列标识信息;将序列标识信息发送至RabbitMQ队列中;获取RabbitMQ队列中的序列标识信息;推送从RabbitMQ队列中获取的序列标识信息。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。计算机处理器用于执行存储介质中存储的计算机程序实现以下方法:
本发明提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,处理器用于执行存储介质中存储的计算机程序实现如第一方面任一的所述一种基于RabbitMQ的分布式事务处理方法:
将消息插入到MySQL中;对消息进行序列标识,得到序列标识信息;将序列标识信息发送至RabbitMQ队列中;获取RabbitMQ队列中的序列标识信息;推送从RabbitMQ队列中获取的序列标识信息。
由以上技术方案可知,本发明提供了一种基于RabbitMQ的分布式事务处理方法,该方法包括:将消息插入到MySQL中;对消息进行序列标识,得到序列标识信息;将序列标识信息发送至RabbitMQ队列中;获取RabbitMQ队列中的序列标识信息;推送从RabbitMQ队列中获取的序列标识信息。该方法通过对消息进行序列标识,得到序列标识信息,然后将序列标识信息发送至RabbitMQ队列中,实现了对消息的有序推送,方便业务解耦,不因为消息发送失败陷入死循环。
以上仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
- 一种基于RabbitMQ的分布式事务处理方法
- 一种基于微服务架构的分布式事务处理方法