本发明涉及rabbitmq数据监控和数据处理,具体地说是一种分布式事务最终一致性的解决方法及系统。
背景技术:
1、当前分布式事务最终一致性的解决方案主要有以下四种:两阶段提交、补偿事务、本地消息表(异步确认)、mq消息事务,但是这几种都存在明显的不足或者局限性。两阶段提交方法,会存在同步阻塞、单点问题、数据不一致、没有容错机制等问题;补偿事务方法,属于应用层的一种补偿方式,所以需要在实现的时候多写很多补偿代码,在一些场景中,一些业务流程可能用补偿事务不太好定义及处理;本地消息表(异步确认)方法,消息表会耦合到业务系统中,如果没有封装好的解决方案,会有很多杂活需要处理;mq事务消息方法,主流的mq如rabbitmq、kafka等都不支持事务消息。
技术实现思路
1、本发明的技术任务是针对以上不足之处,提供一种分布式事务最终一致性的解决方法及系统,解决分布式事务在不同节点执行操作后应保持事务的最终一致性的问题;可实现在任何复杂的业务场景中,保持分布式事务最终一致性。
2、本发明解决其技术问题所采用的技术方案是:
3、一种分布式事务最终一致性的解决方法,基于rabbitmq工具,利用消息的存活时间和死信来完成延时任务;包括:
4、利用消息的存活时间做事务的有效性判断;
5、对于超过存活时间的消息,经由死信交换机的死信路由完成事务的处置。
6、分布式事务是事务操作执行在不同的节点上,因此数据不可能永久的处于软状态,在一定的时间期限内,所有节点的数据备份应当是一致的,即数据延时一段时间后达到一致性。rabbitmq作为主流的mq工具,具有可靠性高、灵活性高、可扩展性高、社区生态强等优势,基于rabbitmq的有效消息,可以处理分布式事务的最终一致性。
7、基于rabbitmq消息的存活时间和死信交换机,实现一个延时队列。通过对延时队列中的消息进行监控,进行消息事务下一步操作的控制,判断事务是否需要转死信路由,然后对事物执行回滚操作,可以提高分布式事务系统中所有的事务的完整性和有效性,并最终保证所有分布式的事务保证最终事务的一致性。
8、优选的,该方法的具体实现步骤包括:
9、1)根据事务生成消息数据;
10、2)在rabbitmq中设置消息的存活时间;
11、3)基于1)和2)以及事务的执行情况,把逻辑认为不允许执行的事务消息经由事件交换机存入死信队列;
12、4)通过rabbitmq消息监听器监听各消息队列,并根据所属队列类别判断事务执行后的结果是否作为最终结果,用于保持所有事务数据的最终一致性。
13、优选的,以rabbitmq工具延时队列的方式进行基于消息队列的消息监听,实现事务的执行情况同步,完成分布式事务最终一致性的实现。
14、优选的,所述利用消息的存活时间做事务的有效性判断,
15、rabbitmq对队列和消息分别设置存活时间;
16、可对队列设置,即设置队列没有消费者连着的保留时间;或对每一个单独的消息做单独的设置;超过了这个时间,则认为这个消息就死了,即称之为死信;
17、如果队列和消息都设置了,则取小值。所以一个消息如果被路由到不同的队列中,这个消息的死亡时间有可能不一样(不同的队列设置)。
18、优选的,单个消息的存活时间,是实现延迟任务的关键;可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是一样的效果。
19、优选的,所述对于超过存活时间的消息,经由死信交换机的死信路由完成事务的处置;
20、一个消息如果满足如下条件,就会进入死信路由:
21、消息被消费者拒收,并且reject方法的参数里requeue是false;即不会被再次放在队列里,被其他消费者使用;
22、消息的存活时间到了,消息过期了;
23、队列长度限制满了,排在前面的消息会被丢弃或者扔到死信路由上。
24、优选的,在某一个设置dead letter exchange的队列中有消息过期了,会自动触发消息的转发,发送到dead letter exchange中去。
25、优选的,先控制消息在一段时间后变成死信,然后控制变成死信的消息被路由到某个指定的交换机。
26、优选的,一个死信路由可以对应多个队列。
27、本发明还要求保护一种分布式事务最终一致性的系统,该系统基于rabbitmq工具,利用消息的存活时间和死信来完成延时任务;该系统具体通过上述的分布式事务最终一致性的解决方法实现分布式事务最终的一致性。
28、本发明的一种分布式事务最终一致性的解决方法及系统与现有技术相比,具有以下有益效果:
29、本发明基于rabbitmq消息的存活时间和死信交换机,实现一个延时队列。通过对延时队列中的消息进行监控,进行消息事务下一步操作的控制,判断事务是否需要转死信路由,然后对事物执行回滚操作,可以提高分布式事务系统中所有的事务的完整性和有效性,并最终保证所有分布式的事务保证最终事务的一致性。
1.一种分布式事务最终一致性的解决方法,其特征在于,基于rabbitmq工具,利用消息的存活时间和死信来完成延时任务;包括:
2.根据权利要求1所述的一种分布式事务最终一致性的解决方法,其特征在于,该方法的具体实现步骤包括:
3.根据权利要求2所述的一种分布式事务最终一致性的解决方法,其特征在于,以rabbitmq工具延时队列的方式进行基于消息队列的消息监听,实现事务的执行情况同步,完成分布式事务最终一致性的实现。
4.根据权利要求1所述的一种分布式事务最终一致性的解决方法,其特征在于,所述利用消息的存活时间做事务的有效性判断,
5.根据权利要求4所述的一种分布式事务最终一致性的解决方法,其特征在于,对于单个消息的存活时间,通过设置消息的expiration字段或者x-message-ttl属性来设置时间。
6.根据权利要求1或4或5所述的一种分布式事务最终一致性的解决方法,其特征在于,所述对于超过存活时间的消息,经由死信交换机的死信路由完成事务的处置;
7.根据权利要求6所述的一种分布式事务最终一致性的解决方法,其特征在于,在某一个设置dead letter exchange的队列中有消息过期了,会自动触发消息的转发,发送到dead letter exchange中去。
8.根据权利要求6所述的一种分布式事务最终一致性的解决方法,其特征在于,先控制消息在一段时间后变成死信,然后控制变成死信的消息被路由到某个指定的交换机。
9.根据权利要求6所述的一种分布式事务最终一致性的解决方法,其特征在于,一个死信路由可以对应多个队列。
10.一种分布式事务最终一致性的系统,其特征在于,基于rabbitmq工具,利用消息的存活时间和死信来完成延时任务;该系统具体通过权利要求1至9任一所述的分布式事务最终一致性的解决方法实现分布式事务最终的一致性。