本发明涉及建筑废弃物智慧监管电子联单系统,具体为一种基于消息补偿的一致性方法。
背景技术:
1、近年来,随着国家倡导各行各业进行数字化转型,各企业对数字化系统有了更高的要求,传统的巨大单体应用程序在部署和运行时,需要单台服务器具有大量内存和其他资源,巨大的单体应用必须通过在多个服务器上复制整个应用程序来实现横向扩展,因此其扩展能力极差;此外,这些应用程序往往更复杂,各个功能组件紧耦合,使得维护和更新更加困难;分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成,对于分布式事务而言几乎满足不了acid,其实对于单机事务而言大部分情况下也没有满足acid。
2、seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务,seata将为用户提供了at、tcc、saga和xa事务模式,为用户打造一站式的分布式解决方案,seata是工作在读未提交的隔离级别,这个级别实际上在日常的多数项目中都不够用,容易造成脏读、幻读,虽然官方提供了全局锁来实现了写隔离与读隔离,但也带来了其他的问题,比如原本项目只是小部分功能需要用到分布式事务,但因为某张表引入了seata控制事务,导致所有与之相关的程序都要加上seata事务。而seata本身存在一定的性能损耗,这将使整个程序的性能大打折扣,为了解决seata隔离级别颗粒度不够及性能损耗问题,本发明提出了一种基于消息补偿的一致性方案,主要依赖支持事务的消息队列和本地消息表。本地消息表的核心思想是将分布式事务拆分成本地事务进行处理,本地消息表实现最终一致性。
技术实现思路
1、本发明的目的在于提供一种基于消息补偿的一致性方法,以解决上述背景技术中提出了的问题。
2、为实现上述目的,本发明提供如下技术方案:一种基于消息补偿的一致性方法,包括如下步骤:
3、s1:首先系统根据规则算法生成电子联单,并将联单业务数据写入电子联单表中,同时将联单对应的消息数据写入本地消息表中;
4、s2:联单服务发送消息到消息队列,车辆服务收到消息,执行成功,本地消息表中记录消息日志,启动定时任务,定时循环扫描本地消息表,定时任务扫描到消息则发送至消息中间件,消息中间件收到消息,成功返回消息发动成功通知给联单服务,联单服务收到成功发动消息,即删除日志消息;
5、s3:车辆服务收到消息并消费消息同时车辆服务进行车辆业务操作,并更新车辆状态;
6、s4:车辆服务处理车辆业务操作完成,发动确认信号给消息中间件;
7、s5:再次启动定时任务,并定时扫描本地消息表,看是否有未完成的任务,若存在未完成的任务,则重新进行消息提交。
8、作为上述技术方案的进一步描述:
9、所述电子联单的生成为系统根据对应的配置文件,依据算法进行生成电子联单,并根据配置文件和电子联单数据库中的电子联单属性,依据录入模块进行录入电子联单表中。
10、作为上述技术方案的进一步描述:
11、所述电子联单表与所述本地消息表为同一个数据库,更新消息与储存消息为同一本地失误,数据库事务处理,成功与失败均保持一致性。
12、作为上述技术方案的进一步描述:
13、消息中间件用于异步通讯、解耦、并发缓冲,将同步阻塞的事务变成异步的。
14、作为上述技术方案的进一步描述:
15、联单服务发送消息需要调动车辆服务的api。
16、作为上述技术方案的进一步描述:
17、所述s5中通过启动定时任务去轮训状态为待发送的消息,并给联单服务发送检查请求。
18、作为上述技术方案的进一步描述:
19、所述联单服务必须实现一个检查监听器,监听器的内容通常就是去检查与之对应的本地事务是否成功,如果成功了,则mq会将消息设置为可发送,否则就删除消息。
20、与现有技术相比,本发明的有益效果是:
21、该基于消息补偿的一致性方法,充分利用了开源的springcloud微服务技术框架及相关组件,在针对建筑废弃物处理业务场景时,本发明对微服务技术框架及相关组件进行了高效的整合,性能好,把全局事务拆分成多个本地事务,对资源的锁定只是一个本地事务的时间,通过在数据库外部实现事务机制达到了最终一致性,对微服务的支持友好,实现简单,开发成本低。
1.一种基于消息补偿的一致性方法,其特征在于:包括如下步骤:
2.根据权利要求1所述的一种基于消息补偿的一致性方法,其特征在于:所述电子联单的生成为系统根据对应的配置文件,依据算法进行生成电子联单,并根据配置文件和电子联单数据库中的电子联单属性,依据录入模块进行录入电子联单表中。
3.根据权利要求1所述的一种基于消息补偿的一致性方法,其特征在于:所述电子联单表与所述本地消息表为同一个数据库,更新消息与储存消息为同一本地失误,数据库事务处理,成功与失败均保持一致性。
4.根据权利要求1所述的一种基于消息补偿的一致性方法,其特征在于:消息中间件用于异步通讯、解耦、并发缓冲,将同步阻塞的事务变成异步的。
5.根据权利要求1所述的一种基于消息补偿的一致性方法,其特征在于:联单服务发送消息需要调动车辆服务的api。
6.根据权利要求1所述的一种基于消息补偿的一致性方法,其特征在于:所述s5中通过启动定时任务去轮训状态为待发送的消息,并给联单服务发送检查请求。
7.根据权利要求6所述的一种基于消息补偿的一致性方法,其特征在于:所述联单服务必须实现一个检查监听器,监听器的内容通常就是去检查与之对应的本地事务是否成功,如果成功了,则mq会将消息设置为可发送,否则就删除消息。