CN109408203B - 一种队列消息一致性的实现方法、装置、计算系统 - Google Patents
一种队列消息一致性的实现方法、装置、计算系统 Download PDFInfo
- Publication number
- CN109408203B CN109408203B CN201811294150.2A CN201811294150A CN109408203B CN 109408203 B CN109408203 B CN 109408203B CN 201811294150 A CN201811294150 A CN 201811294150A CN 109408203 B CN109408203 B CN 109408203B
- Authority
- CN
- China
- Prior art keywords
- message
- management module
- transaction
- queue
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000008569 process Effects 0.000 claims abstract description 22
- 230000007246 mechanism Effects 0.000 claims abstract description 12
- 238000012544 monitoring process Methods 0.000 claims abstract description 6
- 230000015654 memory Effects 0.000 claims description 74
- 230000002085 persistent effect Effects 0.000 claims description 23
- 238000004140 cleaning Methods 0.000 claims description 20
- 238000012217 deletion Methods 0.000 claims description 7
- 230000037430 deletion Effects 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 5
- 230000002457 bidirectional effect Effects 0.000 claims description 3
- 239000007787 solid Substances 0.000 claims description 2
- 230000007547 defect Effects 0.000 abstract description 4
- 238000007726 management method Methods 0.000 description 161
- 238000012546 transfer Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种实现队列消息一致性的装置、实现方法及计算系统,该装置包括:业务逻辑模块、事务管理模块及消息管理管理;业务逻辑模块,请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块开启本地事务,并独立地通过消息管理模块对事务管理模块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,事务管理模块与消息管理模块基于心跳机制确保彼此处于同一进程。在本申请所揭示的一种队列消息一致性的实现方法、装置及计算系统中,克服了队列消息在不同数据源之间因网络故障、设备宕机等外部因素所导致的队列消息投递不一致的缺陷。
Description
技术领域
本发明涉及队列消息业务处理技术领域,尤其涉及一种队列消息一致性的实现方法、装置及计算系统。
背景技术
在业务系统中,两个服务之间通常会使用消息中间件来进行通信,如Active MQ、Rabbit MQ等。消息通常包括队列消息(Queue)和订阅消息 (Topic)两种,本发明中主要关注队列消息。消息队列就是在消息的传输过程中,保存消息的容器。基于事务需要实现ACID的要求(即原子性、一致性、隔离性、持久性),所以需要采用一定的机制来保证,通常采用的是分阶段提交的方式,并基于XA协议实现。
XA协议规定事务管理器(Transaction Manager,TM)和资源管理器 (ResourceManager,RM),采用二阶段提交协议。二阶段提交协议为了保证事务的一致性,不管是事务管理器还是各个资源管理器,每执行一步操作,都会记录日志,为出现故障后的恢复准备依据。二阶段提交协议的存在的弊端是阻塞,因为事务管理器要收集各个资源管理器的响应消息,如果其中一个或多个一直不返回消息,则事务管理器一直等待,应用程序也被阻塞,甚至可能永久阻塞。
更重要的是,采用XA协议确保队列消息一致性的方案中,一旦发生网络故障或者设备宕机,则会导致队列消息调用失败。于此场景中,队列消息无法保证一致性,并只能采用人工修复补偿的方式进行一致性的调整。这就导致了运维人员的工作量急剧增大。同时,即使采用人工修复补偿的方式对队列消息的一致性进行调整,也无法真正确保队列消息在不同数据源之间的一致性。
此外,采用XA协议确保队列消息一致性的方案中,对消息中间件所执行的事务管理机制过于依赖。因此,对于普通用户或者运维人员的技术要求过于苛刻。同时,用户或者运维人员不仅要考虑队列消息自身的业务逻辑,还要兼顾消息中间件的业务逻辑以及事务机制的实现。因此,在现有技术中,队列消息一致性的实现技术方案存在一定的技术缺陷。
有鉴于此,有必要对现有技术中的在不同数据源之间实现队列消息的一致性的实现方法予以改进,以解决上述问题。
发明内容
本发明的目的在于揭示一种队列消息一致性的实现方法、装置及计算系统,以克服队列消息在不同数据源之间因网络故障、设备宕机等外部因素所导致的队列消息投递不一致的缺陷,以确保不同数据源之间队列消息的强一致性。
为实现上述第一个发明目的,本发明提供了一种实现队列消息一致性的装置,包括:业务逻辑模块、事务管理模块及消息管理模块 ;所述业务逻辑模块,请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块开启本地事务,并独立地通过消息管理模块对事务管理模块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,所述事务管理模块与消息管理模块基于心跳机制确保彼此处于同一进程;所述消息管理模块保存并转发所述消息中间体的指定队列中的消息至事务管理模块,并将消息转发执行结果通知事务管理模块,事务管理模块根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务。
作为本发明的进一步改进,所述消息管理模块根据消息头查找消息中间体的指定队列中的消息的被执行转发结果,所述消息头包被执行转发的消息所对应的事务id。
作为本发明的进一步改进,所述装置还包括:持久化存储介质,所述事务管理模块与消息管理模块挂载至持久化存储介质,并仅通过消息管理模块向持久化存储介质写入所述消息中间体的指定队列中被执行转发的消息。
作为本发明的进一步改进,所述持久化存储介质选自磁盘、闪存或者非易失性内存;其中,所述非易性内存由支持随机访问的固态存储装置、快闪存储器、相变存储器、强介电体存储器、磁记录式随时写入读出存储器、双向统一存储器、电阻RAM、NVDIMM或者RAMDISK之一构成。
作为本发明的进一步改进,所述消息管理模块与事务管理模块逻辑上彼此独立。
作为本发明的进一步改进,所述NVDIMM包括:若干并列匹配设置且数量相等的NAND与存储器控制器,以及控制电路;所述控制电路包括:设置在所述NAND和存储器控制器之间呈级联结构的第一选择器、第二选择器、旁路切换模块以及一仲裁器;
存储器控制器接收各个NAND的数据访问请求并发送至仲裁器,并由仲裁器对各个数据访问请求的优先级顺序进行判断,第一选择器根据优先级的顺序,依次与存储器控制器建立多个连接通道,并通过第二选择器与多个并列设置的NAND所建立的正常数据通道进行数据的写入/读取;所述存储器控制器通过接口总线与系统总线连接,以通过所述系统总线与消息管理模块建立连接。
作为本发明的进一步改进,还包括与消息管理模块连接的消息清理模块;其中,
当所述消息清理模块在事务管理模块与消息管理模块之间处于不同进程的场景、消息管理模块调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块中的消息。
作为本发明的进一步改进,所述消息管理模块在确认消息转发执行完毕后,将消息转发执行情况与事务管理模块执行同步操作,并由事务管理模块通知业务逻辑模块所述本地事务被执行完毕。
基于上述第一个发明的技术方案,并实现上述第二个发明目的,本申请还公开了一种队列消息一致性的实现方法,包括以下步骤:
S1、通过业务逻辑模块请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块开启本地事务,并独立地通过消息管理模块对事务管理模块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,所述事务管理模块与消息管理模块基于心跳机制确保彼此处于同一进程;
S2、通过消息管理模块保存并转发所述消息中间体的指定队列中的消息至事务管理模块,并将消息转发执行结果通知事务管理模块;
S3、事务管理模块根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务。
作为本发明的进一步改进,还包括:将所述事务管理模块与消息管理模块挂载至持久化存储介质,并仅通过消息管理模块向持久化存储介质写入所述消息中间体的指定队列中被执行转发的消息;
当所述消息清理模块在事务管理模块与消息管理模块之间处于不同进程的场景、消息管理模块调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块和/或持久化存储介质中的消息。
最后,基于上述第一个发明的技术方案,并实现上述第三个发明目的,本申请还公开了一种计算系统,用以实现队列消息的一致性,所述计算系统包括:
处理器,以及
至少一个如上述任一项发明所述的实现队列消息一致性的装置。
与现有技术相比,本发明的有益效果是:在本申请所揭示的一种队列消息一致性的实现方法、装置及计算系统中,通过将事务管理模块与消息管理模块独立运行并基于心跳机制确保彼此处于同一进程的技术手段,解决了现有技术中需要进行预发消息等中间操作,且不需要依赖消息中间件来实现事务管理机制,从本质上克服了队列消息在不同数据源之间因网络故障、设备宕机等外部因素所导致的队列消息投递不一致的缺陷,以确保不同数据源之间队列消息的强一致性。
附图说明
图1为本发明一种队列消息一致性的实现方法在一种实施例中的逻辑流程图;
图2为本发明一种队列消息一致性的实现方法在另一种实施例中的逻辑流程图;
图3为本发明一种队列消息一致性的实现方法在第三种实施例中的逻辑流程图;
图4为本发明一种队列消息一致性的实现方法的时序图;
图5为本发明一种实现队列消息一致性的装置中的NVDIMM的逻辑结构示意图。
具体实施方式
下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
在详细阐述各个实施例之前,对说明书各个实施例所涉及的技术术语及专有名词作必要的解释与说明。
术语“事务”是指,一系列操作的集合,操作作为一个整体参与到上层逻辑中,某个事务最终呈现出“全部失败”或者“全部生效”两种结果。
术语“事件”是指,计算机程序中具有某种特殊信号量的逻辑抽象。
术语“消息中间体”是指,一种构建高效可靠的数据传输平台的基础软件,其英文表达为Message Oriented Middleware,MOM。
术语“本地事务”是指,在一个数据源或者一个逻辑单元中运行的事务。
术语“全局事务”是指,在多个数据源或者一个逻辑系统中运行的事务。
术语“连接”是指,计算机系统或者具计算功能的系统/装置中具有数据接收-发送关系、控制关系、电连接关系或者逻辑控制关系的物理连接或者电学意义上的连接关系。
术语“队列消息”是指,存放消息的队列型中间媒介,其英文表达为 MessageQueue。
实施例一:
参图1及图4所揭示的一种队列消息一致性的实现装置(以下简称“装置”)的第一种具体实施例。
该装置作为一种中间件系统,其在逻辑上通过事务管理接口与位于上层的应用层进行数据或者消息的交互,并在逻辑上通过统一接口与下层的 DBMS(数据库管理系统)进行数据或者消息的交互,从而形成用户通过具体化的执行终端(例如手机、电脑或者其他具有接收-发送数据的移动终端) 进行某些会产生队列消息的访问请求、处理请求或者反馈操作。上述多种操作最终向用户呈现为各种应用的使用,例如“微信支付操作”、“网络购物的下订单操作”、“手机话费的充值操作”。
在本实施例中,在装置主要由业务逻辑模块1、事务管理模块2与消息管理模块3组成。
业务逻辑模块1与包含一个或者多个事务的应用层连接,以接收应用层所发送的一个或者多个事务(即图1中的事务-1~事务-i),以请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块2开启本地事务,并独立地通过消息管理模块3对事务管理模2块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听。事务管理模块2与消息管理模块3基于心跳机制确保彼此处于同一进程。
在本实施例中,消息管理模块3与事务管理模块2逻辑上彼此独立。当消息管理模块3与事务管理模块2因请求延迟、网路故障或者本装置自身的故障所导致的事务管理模块2与消息管理模块3在逻辑上不处于同一进程时,则会向业务逻辑模块1进行报告,以通知业务逻辑模块1以下信息:自业务逻辑模块1开启成功并发起提交事件的本地事务发送至事务管理模块2 后出现异常。于此场景中的异常可以被理解为逻辑异常、数据异常、时序异常、硬件故障、网络中断或者其他异常。事务管理模块2建立监听事件,这种监听事件在事务管理模块2与消息管理模块3之间呈现为全局事务,并且可由事务管理模块2持续地或者间隔地向消息管理模块3中发送心跳包 (PING-PONG),以保证消息管理模块3与事务管理模块2处于同一进程。消息管理模块3运行一个判断逻辑,并具体为:对事务执行是否调用失败或者调用超时的判断,若是,则向事务管理模块2回滚事务,若否,则向事务管理模块2提交事务。
同时,应用层中的某个事务被业务逻辑模块1所接收后,还可通过该业务逻辑模块1判断是否开启失败,若开启失败,则直接导致事务结束,同时,也可在出现上述异常的场景中,主动向事务管理模块2发起回滚事务请求,以中止或者中断某个具体的事务的执行。
消息管理模块3保存并转发所述消息中间体的指定队列中的消息至事务管理模块2,并将消息转发执行结果通知事务管理模块2,事务管理模块2 根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务。消息管理模块3根据消息头查找消息中间体的指定队列中的消息的被执行转发结果。消息头包被执行转发的消息所对应的事务id。当上述保存预发送消息和事务id执行成功后,消息管理模块3 向业务逻辑模块1进行报告,并具体展现为发送消息。发送至业务管理模块 1中的消息头中包含事务id。业务逻辑模块1至此,可将该消息所对应的本地事务发送至逻辑上位于后端的下层的DBMS,以在下层的DBMS中执行各种基于某个事务所执行的各种操作,例如,支付操作、订单操作、删除操作、修改操作等等。
优选的,在本实施例中的装置,还包括与消息管理模块3连接的消息清理模块4。当所述消息清理模块4在事务管理模块2与消息管理模块3之间处于不同进程的场景、消息管理模块3调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块4将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块3中的消息。合理的释放消息管理模块3中的已经失能或者死亡的消息,能够进一步提高该装置对应用层向该装置持续发送多个事务的能力,从而显著地提高了该装置对基于事务所形成的队列消息在高并发、高负荷场景中的处理能力与装置的运行效率。同时,该消息管理模块 3在确认消息转发执行完毕后,将消息转发执行情况与事务管理模块2执行同步操作,并由事务管理模块2通知业务逻辑模块1所述本地事务被执行完毕,从而通过上述技术手段,进一步保证了一个具体的事务在事务管理模块 2与消息管理模块3之前保证强一致性。这种强一致性,在所有基于数据库形式访问的系统、应用(APP)、金融系统、安全监控系统中具有重要意义。
接下来,申请人以“微信转账”的场景中,以该操作所对应的事务通过本实施例一所揭示的一种队列消息一致性的实现装置的实现队列消息强一致性的过程举例说明。
用户发起转账请求操作(相当于应用层中的一个事务),用户直接发送转账的请求消息给业务逻辑模块1,并执行扣账逻辑;若扣账逻辑执行成功,事务管理模块2执行事务提交,消息管理模块3监听到提交事件,真正的去发送消息,并告知事务管理模块2,事务管理模块2收到则完成整个转账请求流程,如果事务管理模块2未收到消息管理模块3发送消息成功的告知,则回滚整个转账流程。从而,直接通过事务管理模块2保证了此执行流程的强一致性,从而需要依赖消息管理模块3自身的逻辑,从而极大提高了微信转账的安全性与资金账目的一致性,即使存在网络中断、服务器宕机等异常状况时,也不会发生“重复转账”、“用户转账后其资金账户数额不发生变动”的情况,从而保证了金融交易的安全性与数据的强一致性。
同时,本实施例所揭示的装置能够实现业务逻辑模块1与队列消息投递的强一致性,且不需要如现有技术中所执行的预发队列消息等操作,更不需要依赖特定的消息中间件,因此能够显著地提高软件开发人员或者用户的开发效率或者用户体验,并确保了不同数据源之间因执行业务所产生的队列消息的强一致性。
实施例二:
结合参照图2所示,本实施例所揭示的一种队列消息一致性的实现装置 (以下简称“装置”)的第二种具体实现方式。
本实施例所示出的装置与实施例一中的装置,其主要区别在于,本实施例中的装置还包括:持久化存储介质5,事务管理模块2与消息管理模块3 挂载至持久化存储介质5,并仅通过消息管理模块3向持久化存储介质写入所述消息中间体的指定队列中被执行转发的消息。总体而言,本实施例所揭示的装置通过该持久化存储介质5实现了对队列消息的溯源功能,以实现对所有事务通过该装置执行对应的操作后,即使在发生异常时也能够对具体的队列消息进行保存、查询及溯源排查的操作。
具体的,该装置中的持久化存储介质5选自磁盘、闪存或者非易失性内存;其中,所述非易性内存由支持随机访问的固态存储装置、快闪存储器、相变存储器、强介电体存储器、磁记录式随时写入读出存储器、双向统一存储器、电阻RAM、NVDIMM100(板载内存、NAND及FPGA芯片并基于 DIMM标准的非易失性内存)或者RAMDISK(虚拟内存盘是通过软件将一部分内存(RAM)模拟为硬盘)之一构成。
参图5所示,具体的,在本实施例中,该NVDIMM100包括:若干并列匹配设置且数量相等的NAND20b与存储器控制器10a,以及控制电路30。该控制电路30可被配置为FPGA芯片或者其他具有下述功能的集成电路。控制电路30包括:设置在所述NAND20b和存储器控制器10a之间呈级联结构的第一选择器301、第二选择器302、旁路切换模块303以及一仲裁器304。存储器控制器10a接收各个NAND20b的数据访问请求并发送至仲裁器304,并由仲裁器304对各个数据访问请求的优先级顺序进行判断,第一选择器301 根据优先级的顺序,依次与存储器控制器10a建立多个连接通道,并通过第二选择器302与多个并列设置的NAND20b所建立的正常数据通道312进行数据的写入/读取;存储器控制器10a通过接口总线305与系统总线40连接,以通过系统总线40与消息管理模块3建立连接,从而将事务管理模块2 与消息管理模块3与NVDIMM100建立挂载。
具体的,存储器控制器10a接收各个存储器20b的数据访问请求101a、 101b并发送至仲裁器304。仲裁器304接收各个数据访问请求101a、101b 并判断优先级的顺序。第一选择器301根据优先级的顺序,依次与存储器控制器10a建立多个连接通道102a、102b,并通过第二选择器302与多个并列设置的存储器20所建立的正常数据通道312进行数据的写入/读取。
在本实施方式中,优先级排序采用如下的排序策略:
第一优先级:存储器20的管理数据;
第二优先级:系统状态数据;
第三优先级:需要写入存储器20b或从存储器20b中读取的一般数据。
具体的,在本实施方式中,仲裁器304根据数据访问请求101a、101b 所包含数据的重要性,判断优先级的顺序。即图5中,数据访问请求101a、 101b哪一个存储器控制器10a会与第一选择器301优先建立数据连接通道 102a、102b。
当存储器控制器10a监测到存储器20b中数据写入/读取的异常情况时,通过旁路切换模块303向仲裁器304发送中断命令3041,用以中断第一选择器301与第二选择器302的连接,转而在旁路切换模块303与第二选择器302 之间建立连接,即图5中的连接通道313。
具体的,存储器控制器10a通过接口总线305与系统总线40连接。接口总线305包括I2C或者SMBUS,并优选为SMBUS。SMBUS(System Management Bus)是一种二线制串行总线。其抛弃了传统的中央处理器中控制总线和数据总线的形式,因此通过接口总线305可传输数据信号、时钟信号、地址信号。
存储器20b是非易失性存储器或者易失性存储器,并优选为非易失性存储器。非易失性存储器由快闪存储器(Flash memory)、相变存储器(FCM)、强介电体存储器(FeRAM)、磁记录式随时写入读出存储器(MRAM)、双向统一存储器(OUM)、电阻RAM(RRAM)之一构成。快闪存储器(Flash memory)由NAND闪存、NOR闪存之一构成。
易失性存储器由静态随机存取存储器(SRAM)、动态随机存取存储器 (DRAM)之一构成,并优选为动态随机存取存储器(DRAM)。该存储器 20b为NAND闪存,该存储器控制器10a为NAND控制器。由于NAND闪存与NAND控制器为非常成熟的现有技术,在此不再累述。由于NAND闪存的固有特性,每个NAND闪存都具有其设定的写入/读取周期,因此可将多个NAND闪存并列设置,并与多个NAND控制器并列匹配设置。
本实施例所揭示的装置与实施例一中所示出的装置具相同部分的技术方案请参实施例一所述,在此不再赘述。
实施例三:
结合参照图3所示,本实施例揭示了本发明一种队列消息一致性的实现装置(以下简称“装置”)的第三种具体实现方式。本实施例所揭示的装置与上述任一种实施例所揭示的装置相比,尤其与实施例二所揭示的装置相比,其主要区别在于,在本实施例中,持久化存储介质5与消息清理模块4 连接,并通过该消息清理模块4对持久化存储介质5所临时存放的队列消息进行基于实施例一所揭示的消息清理模块4所执行的对队列消息的清理操作,以释放持久化存储介质5的存储空间。
本实施例所揭示的装置与实施例一和/或实施例二中所示出的装置相同部分的技术方案请参实施例一和/或实施例二所述,在此不再赘述。
实施例四:
本实施例揭示了一种队列消息一致性的实现方法(以下简称“方法”)。该方法可基于上述实施例一至实施例三中任意一项实施例所揭示的一种队列消息一致性的实现装置所实现。
具体的,在本实施例中,该一种队列消息一致性的实现方法包括以下步骤:
步骤S1、通过业务逻辑模块请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块2开启本地事务,并独立地通过消息管理模块3对事务管理模块2所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,所述事务管理模块2与消息管理模块3基于心跳机制确保彼此处于同一进程;
步骤S2、通过消息管理模块3保存并转发所述消息中间体的指定队列中的消息至事务管理模块2,并将消息转发执行结果通知事务管理模块2;
步骤S3、事务管理模块2根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务。
优选的,该方法还包括:将所述事务管理模块2与消息管理模块3挂载至持久化存储介质5,并仅通过消息管理模块3向持久化存储介质5写入所述消息中间体的指定队列中被执行转发的消息。当所述消息清理模块在事务管理模块2与消息管理模块3之间处于不同进程的场景、消息管理模块 3调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块3和/或持久化存储介质5中的消息。
进一步的,该方法可进一步通过图4所揭示的时序图进行阐述说明。
S101、业务逻辑模块1开启事务管理模块2事务;
若开启成功,继续下一步,并跳转执行步骤S102;
若开启失败,结束并返回;
S102、事务管理模块2开启消息管理模块事务;
若开启成功,消息管理模块3建立监听事件,监听事务管理模块2的提交和回滚事件,并且事务管理模块2持续的往消息管理模块发送心跳包 (PING-PONG)保证消息管理模块3和事务管理模块2处于一个相同进程中;
若开启失败,结束并返回;
S103、执行业务逻辑,发送消息给消息管理模块3,消息头中携带事务管理器中此事务的id标识;
S104、消息管理模块3保存发送消息和事务id,并基于S4.1与S4.2,由事务管理模块2持续地或者间隔地向消息管理模块3中发送心跳包 (PING-PONG),以保证消息管理模块3与事务管理模块2处于同一进程;
S105、业务逻辑模块1执行业务逻辑,并判断业务是否被成功执行;
若执行成功,告知事务管理模块2,并由事务管理模块2发起提交事件,转执行步骤S106;
若执行失败,告知事务管理模块2,并由事务管理模块2发起回滚事件,转执行步骤S107;
S106、消息管理模块3监听到事务管理模块2的提交事件,发送队列消息,并告知事务管理模块2跳转执行步骤S108;
S107、消息管理模块3监听到事务管理模块2的回滚事件,通过消息清理模块4回滚清理消息,并告知事务管理模块2,然后跳转执行步骤S109;
S108、事务管理模块2收到消息管理模块3的提交,则整个事务完成提交;
S109、事务管理模块2收到消息管理模块3的回滚,则整个事务完成回滚;
S110、事务管理模块2监听到事务管理模块2向消息管理模块3所提交的事件和事务id;
S111、消息管理模块3根据事务id找出事务所对应的被执行的消息;
S112、消息管理模块3向事务管理模块2发送消息发送成功的消息,并告知事务管理模块2该事务已经被提交;
S113、事务管理模块2向业务逻辑模块1发送事务提交成功的消息,至此基于某种业务所形成的事务被执行完毕。
实施例五:
本实施例揭示了一种计算系统,用以实现队列消息的一致性,所述计算系统包括:
处理器,以及
至少一个上述实施例一至实施例三中任一个实施例所述的实现队列消息一致性的装置。
该处理器可通过被连接到如图5所示出的系统总线40中。该处理器可以是CPU或者其他基于浮点运算功能的芯片。
本实施例所揭示的实现队列消息一致性的装置以及该装置的对队列消息实现一致性的实现方法、原理及过程,请参上文所述,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
Claims (10)
1.一种实现队列消息一致性的装置,其特征在于,包括:业务逻辑模块、事务管理模块及消息管理模块 ;所述业务逻辑模块,请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块开启本地事务,并独立地通过消息管理模块对事务管理模块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,所述事务管理模块与消息管理模块基于心跳机制确保彼此处于同一进程;所述消息管理模块保存并转发所述消息中间件的指定队列中的消息至事务管理模块,并将消息转发执行结果通知事务管理模块,事务管理模块根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务;
还包括与消息管理模块连接的消息清理模块;其中,
当所述消息清理模块在事务管理模块与消息管理模块之间处于不同进程的场景、消息管理模块调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块中的消息。
2.根据权利要求1所述的装置,其特征在于,所述消息管理模块根据消息头查找消息中间件的指定队列中的消息的被执行转发结果,所述消息头包含被执行转发的消息所对应的事务id。
3.根据权利要求1所述的装置,其特征在于,所述装置还包括:持久化存储介质,所述事务管理模块与消息管理模块挂载至持久化存储介质,并仅通过消息管理模块向持久化存储介质写入所述消息中间件的指定队列中被执行转发的消息。
4.根据权利要求3所述的装置,其特征在于,所述持久化存储介质选自磁盘、闪存或者非易失性内存;其中,所述非易性内存由支持随机访问的固态存储装置、快闪存储器、相变存储器、强介电体存储器、磁记录式随时写入读出存储器、双向统一存储器、电阻RAM、NVDIMM或者RAMDISK之一构成。
5.根据权利要求1所述的装置,其特征在于,所述消息管理模块与事务管理模块逻辑上彼此独立。
6.根据权利要求4所述的装置,其特征在于,所述NVDIMM包括:若干并列匹配设置且数量相等的NAND(20b)与存储器控制器(10a),以及控制电路(30);所述控制电路(30)包括:设置在所述NAND(20b)和存储器控制器(10a)之间呈级联结构的第一选择器(301)、第二选择器(302)、旁路切换模块(303)以及一仲裁器(304);
存储器控制器(10a)接收各个NAND(20b)的数据访问请求并发送至仲裁器(304),并由仲裁器(304)对各个数据访问请求的优先级顺序进行判断,第一选择器(301)根据优先级的顺序,依次与存储器控制器(10a)建立多个连接通道,并通过第二选择器(302)与多个并列设置的NAND(20b)所建立的正常数据通道(312)进行数据的写入/读取;所述存储器控制器(10a)通过接口总线(305)与系统总线(40)连接,以通过所述系统总线(40)与消息管理模块建立连接。
7.根据权利要求1至6中任一项所述的装置,其特征在于,所述消息管理模块在确认消息转发执行完毕后,将消息转发执行情况与事务管理模块执行同步操作,并由事务管理模块通知业务逻辑模块所述本地事务被执行完毕。
8.一种队列消息一致性的实现方法,其特征在于,包括以下步骤:
S1、通过业务逻辑模块请求打开消息中间件的本地事务,并在执行事务前调用事务管理模块开启本地事务,并独立地通过消息管理模块对事务管理模块所开启的所述消息中间件的本地事务所产生的提交事件或回滚事件执行监听,所述事务管理模块与消息管理模块基于心跳机制确保彼此处于同一进程;
S2、通过消息管理模块保存并转发所述消息中间件的指定队列中的消息至事务管理模块,并将消息转发执行结果通知事务管理模块;
S3、事务管理模块根据所述转发执行结果执行提交事件或回滚事件,消息中间件的本地事务为所述消息中间件上运行的事务;
并在事务管理模块与消息管理模块之间处于不同进程的场景、消息管理模块调用消息失败或者调用超时的场景时,对符合上述场景的消息,通过消息清理模块将该消息的索引标识在文件配置表中执行删除标记操作,将所述消息的簇号在文件配置表中的登记项清零,以释放消息管理模块和/或持久化存储介质中的消息。
9.根据权利要求8所述的队列消息一致性的实现方法,其特征在于,还包括:将所述事务管理模块与消息管理模块挂载至持久化存储介质,并仅通过消息管理模块向持久化存储介质写入所述消息中间件的指定队列中被执行转发的消息。
10.一种计算系统,用以实现队列消息的一致性,其特征在于,所述计算系统包括:
处理器,以及
至少一个如权利要求1至6中任一项所述的实现队列消息一致性的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811294150.2A CN109408203B (zh) | 2018-11-01 | 2018-11-01 | 一种队列消息一致性的实现方法、装置、计算系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811294150.2A CN109408203B (zh) | 2018-11-01 | 2018-11-01 | 一种队列消息一致性的实现方法、装置、计算系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109408203A CN109408203A (zh) | 2019-03-01 |
CN109408203B true CN109408203B (zh) | 2019-10-18 |
Family
ID=65471158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811294150.2A Active CN109408203B (zh) | 2018-11-01 | 2018-11-01 | 一种队列消息一致性的实现方法、装置、计算系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109408203B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110147287A (zh) * | 2019-04-24 | 2019-08-20 | 珠海市珠澳跨境工业区好易通科技有限公司 | 一种消息队列收发系统及方法 |
CN110633164B (zh) * | 2019-08-09 | 2023-05-16 | 锐捷网络股份有限公司 | 一种面向消息的中间件故障恢复方法及装置 |
CN111221663B (zh) * | 2019-11-21 | 2022-07-22 | 苏州浪潮智能科技有限公司 | 一种消息数据处理方法、装置、设备及可读存储介质 |
CN112905309B (zh) * | 2019-12-03 | 2023-12-05 | 中盈优创资讯科技有限公司 | 业务开通事务异常处理方法及装置 |
CN111190914A (zh) * | 2019-12-31 | 2020-05-22 | 武汉中海庭数据技术有限公司 | 一种应用于高精度地图的中间层数据安全提交方法、装置、设备及存储介质 |
CN111708617A (zh) * | 2020-06-12 | 2020-09-25 | 京东数字科技控股有限公司 | 事务处理方法、装置、设备及计算机可读存储介质 |
CN112395083B (zh) * | 2020-09-30 | 2022-03-15 | 腾讯科技(深圳)有限公司 | 一种资源文件的释放方法、装置和计算机可读存储介质 |
CN112492019B (zh) * | 2020-11-24 | 2023-07-18 | 度小满科技(北京)有限公司 | 消息推送方法、装置、电子设备及存储介质 |
CN112559548B (zh) * | 2020-12-27 | 2023-06-16 | 浙江融象数科控股有限公司 | 消息中间件的数据同步系统及方法 |
CN113254167B (zh) * | 2021-06-07 | 2021-11-16 | 中电金信软件有限公司 | 分布式事务处理方法、装置、系统及电子设备 |
CN113760470B (zh) * | 2021-09-09 | 2023-11-03 | 福建天晴数码有限公司 | 一种基于事务消息及反查实现分布式事务的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023974A (zh) * | 2009-09-14 | 2011-04-20 | 中国移动通信集团公司 | 一种通过消息队列处理消息的方法、装置和系统 |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN104794119A (zh) * | 2014-01-17 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 用于中间件消息的存储与传输方法及系统 |
CN108009027A (zh) * | 2017-11-23 | 2018-05-08 | 北京百度网讯科技有限公司 | 队列消息一致性的实现方法、装置、设备及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9578130B1 (en) * | 2012-06-20 | 2017-02-21 | Amazon Technologies, Inc. | Asynchronous and idempotent distributed lock interfaces |
CN103036717B (zh) * | 2012-12-12 | 2015-11-04 | 北京邮电大学 | 分布式数据的一致性维护系统和方法 |
US8806507B1 (en) * | 2013-01-31 | 2014-08-12 | Red Hat, Inc. | Dynamic provisioning of message groups |
CN103647669B (zh) * | 2013-12-16 | 2017-04-05 | 上海证券交易所 | 一种保证分布式数据处理一致性的系统及方法 |
CN107045454B (zh) * | 2016-02-06 | 2020-06-26 | 华为技术有限公司 | 跨进程分布式事务控制方法及相关系统 |
CN106598762B (zh) * | 2016-12-29 | 2020-04-17 | 上海理想信息产业(集团)有限公司 | 一种消息同步方法 |
CN106970846B (zh) * | 2017-03-15 | 2019-08-16 | 银清科技(北京)有限公司 | 支付系统消息控制和处理方法、装置 |
CN110445619B (zh) * | 2017-03-30 | 2020-10-16 | 腾讯科技(深圳)有限公司 | 区块链系统、消息处理方法及存储介质 |
WO2018191879A1 (en) * | 2017-04-19 | 2018-10-25 | Ebay Inc. | Consistency mitigation techniques for real-time streams |
CN108459919B (zh) * | 2018-03-29 | 2022-04-15 | 中信百信银行股份有限公司 | 一种分布式事务处理方法及装置 |
-
2018
- 2018-11-01 CN CN201811294150.2A patent/CN109408203B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023974A (zh) * | 2009-09-14 | 2011-04-20 | 中国移动通信集团公司 | 一种通过消息队列处理消息的方法、装置和系统 |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN104794119A (zh) * | 2014-01-17 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 用于中间件消息的存储与传输方法及系统 |
CN108009027A (zh) * | 2017-11-23 | 2018-05-08 | 北京百度网讯科技有限公司 | 队列消息一致性的实现方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109408203A (zh) | 2019-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109408203B (zh) | 一种队列消息一致性的实现方法、装置、计算系统 | |
US7240234B2 (en) | Storage device for monitoring the status of host devices and dynamically controlling priorities of the host devices based on the status | |
JP3516344B2 (ja) | 分散処理システムの多重データ処理方法 | |
US7028218B2 (en) | Redundant multi-processor and logical processor configuration for a file server | |
CN102831156B (zh) | 一种云计算平台上的分布式事务处理方法 | |
JP3790589B2 (ja) | 分散データベーストランザクションのコミットメント方法 | |
US7779418B2 (en) | Publisher flow control and bounded guaranteed delivery for message queues | |
US7900085B2 (en) | Backup coordinator for distributed transactions | |
CN110807064B (zh) | Rac分布式数据库集群系统中的数据恢复装置 | |
CN103885895A (zh) | 容错集群存储系统中的写入性能 | |
US20040107381A1 (en) | High performance transaction storage and retrieval system for commodity computing environments | |
CN102088490B (zh) | 数据存储方法、设备和系统 | |
WO2006125392A1 (fr) | Systeme de traitement informatique destine a la mise a jour de donnees et procede de mise a jour de donnees | |
US8122301B2 (en) | Performing remote loads and stores over networks | |
EP2898655A2 (en) | System and method for small batching processing of usage requests | |
CN106874143A (zh) | 服务器备份方法及其备份系统 | |
WO2024109239A1 (zh) | 集群数据同步方法、装置、设备及非易失性可读存储介质 | |
EP3087483A1 (en) | System and method for supporting asynchronous invocation in a distributed data grid | |
CN112181723B (zh) | 一种金融灾备方法、装置、存储介质及电子设备 | |
US8301750B2 (en) | Apparatus, system, and method for facilitating communication between an enterprise information system and a client | |
CN103441831B (zh) | 一种双进程间的全双工通信及互保方法和系统 | |
WO2017181430A1 (zh) | 分布式系统的数据库复制方法及装置 | |
WO2018157605A1 (zh) | 一种集群文件系统中消息传输的方法及装置 | |
JPH0352049A (ja) | 通信制御プログラムの連続運転保証処理方法 | |
JP3197279B2 (ja) | 業務引継システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 214000, science and software park, Binhu District, Jiangsu, Wuxi 6 Patentee after: Huayun data holding group Co., Ltd Address before: 214000, science and software park, Binhu District, Jiangsu, Wuxi 6 Patentee before: WUXI CHINAC DATA TECHNICAL SERVICE Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |