CN114116262B - 一种分布式异步数据通讯的处理方法、装置、介质和设备 - Google Patents
一种分布式异步数据通讯的处理方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN114116262B CN114116262B CN202111459260.1A CN202111459260A CN114116262B CN 114116262 B CN114116262 B CN 114116262B CN 202111459260 A CN202111459260 A CN 202111459260A CN 114116262 B CN114116262 B CN 114116262B
- Authority
- CN
- China
- Prior art keywords
- message
- sending
- asynchronous
- consumption
- asynchronous message
- 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
Images
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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种分布式异步数据通讯的处理方法、装置、介质及设备,通过发送端设备接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得业务操作的业务数据落入数据库后,发送一条异步消息到消息队列,监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,最后在确定消息队列接收异步消息成功后,更新异步消息发送记录中的发送状态的标识;消费端设备接收消息队列中的异步消息,并在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理。本发明实施例能够保证分布式异步数据通讯的可靠性。
Description
技术领域
本发明涉及信息技术领域,尤其涉及一种分布式异步数据通讯的处理方法、装置、介质和设备。
背景技术
金融行业技术发展日新月异,随着分布式系统的建设进入常态,微服务系统之间通讯变得越来越频繁。在核心的交易场景下对异步通讯的技术难度提出了更高的要求,发明人在研发过程中发现,现有技术中存在如下技术问题:
发送端的业务操作事务未提交完成,但消费端的代码已经执行完了,如果消费端的代码依赖的部分数据来自于发送端的业务操作落在数据库的数据,消费端的代码将会执行错误的结果;发送到消息队列的消息未正常发送出去,消费端设备消费不到消息,消费端的业务处理就不会执行,也无法发现;消费端的业务处理可能会执行失败,但系统无法重新执行消费端的业务处理。
发明内容
有鉴于此,本发明实施例的目的在于提供一种分布式异步数据通讯的处理方法、装置、介质和设备,能够保障分布式异步数据通讯的可靠性。
为达到上述目的,第一方面,本发明提供了一种分布式异步数据通讯的处理方法,应用于发送端设备,所述处理方法包括:
当接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
发送一条异步消息到消息队列;
监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;
当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记。
在一些可能的实施方式中,在所述当确定所述消息队列接收所述异步消息成功后,更新所述异步消息发送记录中的发送状态的标识之后,还包括:
对所述本地发送消息表中的异步消息发送记录进行周期性的任务检索,以检索出发送状态的标识为第一标记的目标异步消息发送记录;
将所述目标异步消息发送记录中的所述异步消息的发送内容重新发送至所述消息队列。
在一些可能的实施方式中,所述处理方法还包括:
通过批量处理更新所述本地消息发送表中插入的异步消息发送记录;
按照所述异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行排序。
第二方面,本发明提供了一种分布式异步数据通讯的处理方法,应用于消费端设备,所述处理方法包括:
接收消息队列中的异步消息;
在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消息消费记录包括所述异步消息的消费内容及消费状态的标识;
根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记。在一些可能的实施方式中,在按照所述异步消息执行业务处理后,更新所述异步消息消费记录中的消费状态的标识之后,还包括:
对所述本地消费消息表中的异步消息消费记录进行周期性任务检索,获取所述异步消息消费记录中消费状态标识记为第三标记的异步消息的消息内容;
按照所述异步消息消费记录中消费状态标识记为第三标记的异步消息的消息内容重新执行业务处理。
在一些可能的实施方式中,所述处理方法还包括:
确定在本地消费消息表中插入异步消息消费记录时是否出现报错信息;
如果出现报错信息,指示不再执行出现报错信息的异步消息消费记录中的消息内容。
在一些可能的实施方式中,所述处理方法还包括:
通过批量处理更新所述本地消费消息表中插入的异步消息消费记录;
按照所述异步消息消费记录中异步消息的ID对所述异步消息消费记录进行排序。
第三方面,本发明提供了一种分布式异步数据通讯的处理方法,所述处理方法包括:
发送端设备接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
发送端设备发送一条异步消息到消息队列,监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;
发送端设备根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
当所述异步消息正在发送中或者发送失败时,发送端设备将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,发送端设备将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;
消费端设备接收消息队列中的异步消息;
消费端设备在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消费消息记录包括所述异步消息的消费内容及消费状态的标识;
消费端设备根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
当所述异步消息的发送状态是正在接收中或者接收失败时,消费端设备确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,消费端设备确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记。
在一些可能的实施方式中,所述处理方法还包括:
所述发送端设备将所述本地消息发送表中的异步消息发送记录与所述本地消费消息表中的异步消息消费记录进行比对,确定所述异步消息发送记录与所述异步消息消费记录是否一一对应;如果否,所述发送端设备将没有一一对应的异步消息发送表中的异步消息发送记录重新发送至所述消息队列;
所述消费端设备按照所述异步消息发送记录中的消息内容重新执行业务处理。
第四方面,本发明提供了一种分布式异步数据通讯的处理装置,应用于发送端设备,所述装置包括:
数据库事务单元,用于当接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
发送单元,用于发送一条异步消息到消息队列;
状态监测及发送记录单元,用于监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;
发送状态更新单元,用于当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记。
第五方面,本发明提供了一种分布式异步数据通讯的处理装置,应用于消费端设备,所述装置包括:
接收单元,用于接收消息队列中的异步消息;
消费记录单元,用于在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消息消费记录包括所述异步消息的消费内容及消费状态的标识;
确定单元,用于根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
消费状态更新单元,用于当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记。
第六方面,本发明提供了一种分布式异步数据通讯的处理系统,所述系统包括:发送端设备、消息队列和消费端设备;
所述发送端设备,用于当接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;发送一条异步消息到所述消息队列,监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录;当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;
所述消费端设备,用于接收所述消息队列中的异步消息,并在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录;根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记。
第七方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面、第二方面和第三方面所述的任意一种所述的分布式异步数据通讯的处理方法。
第八方面,本发明实施例提供了一种电子设备,其包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现第一方面或者第二方面所述的分布式异步数据通讯的处理方法。
上述技术方案具有如下有益效果:
本发明实施例提供的分布式异步数据通讯的处理方法、装置、介质及设备,通过发送端设备接收到发送业务操作的命令后,执行所述业务操作的数据库事务提交,使得业务操作的业务数据落入数据库后,发送一条异步消息到消息队列,监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,最后在确定消息队列接收异步消息成功后,更新异步消息发送记录中的发送状态的标识;消费端设备接收消息队列中的异步消息,并在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,之后根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理。本发明实施例能够保证分布式异步数据通讯的可靠性,能够保障消息必送达、必消费以及重复发送的幂等处理等。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的第一种分布式异步数据通讯的处理方法流程图;
图2是本发明实施例的一种定时检索本地发送消息表的示意图;
图3是本发明实施例的第二种分布式异步数据通讯的处理方法流程图;
图4是本发明实施例的一种定时检索本地消费消息表的示意图;
图5是本发明实施例的第三种分布式异步数据通讯的处理方法流程图;
图6是本发明实施例的一种分布式异步数据处理方法的整体流程部署图;
图7是本发明实施例的第一种分布式异步数据通讯处理装置的框图;
图8是本发明实施例的第二种分布式异步数据通讯处理装置的框图;
图9是本发明实施例的第三种分布式异步数据通讯处理装置的框图;
图10是本发明实施例的一种计算机可读存储介质的功能框图;
图11是本发明实施例的一种电子设备的功能框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例的一种分布式异步数据通讯的处理方法,可以应用金融、泛金融领域异构系统间通讯交互处理,保证分布式异步数据通讯的可靠性,能够保障消息必送达、必消费以及重复发送的幂等处理等。
图1是本发明实施例的一种分布式异步数据通讯的处理方法的流程图。如图1所示,该方法应用于发送端设备,具体包括如下步骤:
S101,当接收到发送业务操作的命令后,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库。
在进一步的实施例中,业务操作是指金融行业相关的一些事务,在执行业务操作的数据库事务提交之前,还可以对提交的数据进行校验,只有校验合法后才触发数据库事务提交。由于数据库有自己的事务管理机制,插入数据时不会立刻落入磁盘,而是在内存里,即当接收到发送的命令后数据不会直接落入数据库,先对数据进行校验,当插入的数据不合法时是不允许落入磁盘的,只有数据校验合法的数据才会触发数据库事务提交,此时才会落入磁盘。
S102,发送一条异步消息到消息队列。
每当有一个业务操作需要处理时,发送端都会发送一条异步消息到消息队列,供后续的消费端进行消费。
S103,监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,异步消息发送记录包括异步消息的发送内容及发送状态的标识。
具体的,发送端每次发送一条异步消息就会插入一条与异步消息对应的消息记录,记录里包含了异步消息的发送状态和消息内容,通过在本地发送消息表中插入异步消息记录,以便于监测异步消息是否发送成功,以及后续过程中对未发送到消息队列的消息进行检索、核验和重新发送。其中,消息队列可以为RabbitMQ、ActiveMQ、RocketMQ以及Kafka消息队列中的任意一种。
作为一个举例说明,本地发送消息表包含但不限于如下内容:
Id:每一个消息ID都标识一笔业务消息;每一个ID都表示一条发送消息记录;
Type:消息类型,本地发送消息表中会有对应的类型标识,例如,S标识发送端消息;
Time:消息生产的时间;发送消息表有发送消息的时间,当消息发送状态长时间处于发送中(标识N)的状态时(比如当时服务器宕机,消息发送没有成功),此时将自动重新发送该消息;或者,通过距离当前时间超过一定时间(如30分钟)并且消息状态为标识N时,也会将此类消息检索出来做自动重试;发送端的消息重试是重新发送消息体到消息队列;
Retry:消息重试次数,消息自动重试有次数限制,超过三次不再支持重试,即消息重复发送或者重复消费的次数不超过三次;
Content:消息内容;
Flag:是否人工重试的标识,用于标识此消息是人工重试的还是自动重试;
BIZ:批次号,代表是同一批业务处理的消息;同一笔业务中的多条消息会具有相同的批次号,通过批次号可以监控到消息处理的链路,即对消息进行了哪些业务处理。
S104,当异步消息正在发送中或者发送失败时,将异步消息发送记录中的发送状态的标识记为第一标记;当消息队列接收异步消息成功后,将异步消息发送记录中的发送状态的标识由第一标记更新为第二标记。
具体的,在异步消息发送记录表中,对每一条记录都会写入一条记录消息发送状态标识,例如标识N标识发送中或者发送失败,在消息发送成功后可以将标识N更新为Y,表示该条记录已发送成功,这样只要查看数据库中的发送消息表中的异步消息发送记录的状态标识就知道消息是否一定发送成功了,如果状态标识为N,则说明没有发送成功,当状态标识为Y就说明发送成功。
本发明实施例在接收到发送业务操作的命令后,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库后,发送一条异步消息到消息队列,监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,当异步消息正在发送中或者发送失败时,将异步消息发送记录中的发送状态的标识记为第一标记;当消息队列接收异步消息成功后,将异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;本发明实施通过在本地发送消息表中插入每一条异步消息发送记录,能够随时监测并记录消息的发送状态,便于查询未发送成功的消息,以保障消息必送达。
在一些实施例中,在当确定消息队列接收异步消息成功后,更新异步消息发送记录中的发送状态的标识之后,还可以包括周期性地对异步消息发送记录进行检索。如图2所示,包括如下步骤:
S105,通过定时任务中央控制器按照预设的检索周期定时地对数据库中的本地发送消息表中的异步消息发送记录进行周期性的任务检索,以检索出发送状态的标识为第一标记的目标异步消息发送记录。
例如,五分钟检索一次,具体检索周期的设定长短可以根据实际情况设置,本实施例中不做具体限制。
S106,将目标异步消息发送记录中的异步消息的发送内容重新发送至消息队列。
S107,监听消费端对每一个异步消息的消息内容的业务操作情况。
本实施例中,将检索出的未发送成功的目标异步消息发送记录,也就是发送状态的标识为第一标记的目标异步消息发送记录重新发送至消息队列后,发送端还可以监听消费端的对每一个异步消息的业务操作情况。通过周期性的对本地发送消息表中的异步消息发送记录进行检索,能够保证每一个异步消息都成功发送至消息队列,从而提高了发送端发送消息的可靠性。
在一些实施例中,还可以通过批量处理更新本地消息发送表中插入的异步消息发送记录;按照异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行排序。因为在异步消息高并发的场景下瞬间会有万条异步消息发送记录需要批量落入数据库的本地发送消息表,在批量对数据库的数据做更新操作,对这一批异步消息根据其消息ID做排序,如果千万条消息记录一条一条的依次更新将消费大量的网络资源占用时间,批量更新可以减少网络交互次数,提升交易效率。
作为一个举例说明,根据异步消息的ID做升序排序,例如一批消息ID为01、03、02等,升序排序后消息ID变为01、02、03等。通过对消息进行批量更新处理,可以避免当做数据库批量更新时,主键(ID)无序会产生死锁导致更新失败。
需要说明的是,为了保障异步消息落数据库和业务处理落数据库之间尽量不要互相干扰,发送端设备在发送消息时,本地发送消息表使用独立的数据库连接池和独立事务,避免影响业务的数据库连接池使用。
本实施例的有益效果如下:
本发明实施通过在本地发送消息表中插入每一条异步消息发送记录,能够随时监测并记录消息的发送状态,便于查询未发送成功的消息,以保障消息必送达;
本发明实施通过周期性的对本地发送消息表中的异步消息发送记录进行检索,能够保证每一个异步消息都成功发送至消息队列,从而提高了发送端发送消息的可靠性;
本发明实施例通过对本地发送消息表中的数据进行批量更新与排序,避免数据库死锁。
实施例二
图3是本发明提供的一种分布式异步数据通讯的处理方法的流程图,该处理方法应用于消费端设备,具体包括:
S201,接收消息队列中的异步消息。
具体地,消费端设备从消息队列中获取异步消息,并根据异步消息的内容执行业务处理操作。
S202,在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,异步消息消费记录包括异步消息的消费内容及消费状态的标识;
具体的,消费端设备在接收到每条异步消息前同样会插入一条与异步消息对应的异步消息消费记录,其记录每条异步消息的消费内容和消费状态的标识。通过在本地消费消息表中插入异步消息记录,以便于监测异步消息是否消费成功,以及后续过程中对未消费的消息进行检索、核验和重新消费。
作为一个举例说明,本地消费消息表中包含但不限于如下内容:
Id:每一个消息ID都标识一笔业务消息;每一个ID都表示一条消息消费记录;
Type:消息类型,消费消息表中会有对应的类型标识,例如,L标识消费端消息;
Time:消息生产的时间;发送消息表有发送消息的时间,当消息发送状态长时间处于发送中(标识N)的状态时(比如当时服务器宕机,消息发送没有成功),此时将自动重新发送该消息;或者,通过距离当前时间超过一定时间(如30分钟)并且消息状态为标识N时,也会将此类消息检索出来做自动重试;消费端的消息重试是直接重试业务逻辑,通过消息类型做不同的重试处理;
Retry:消息重试次数,消息自动重试有次数限制,超过三次不再支持重试,即消息重复发送或者重复消费的次数不超过三次;
Content:消息内容;
Flag:是否人工重试的标识,用于标识此消息是人工重试的还是自动重试;
BIZ:批次号,代表是同一批业务处理的消息;同一笔业务中的多条消息会具有相同的批次号,通过批次号可以监控到消息处理的链路,即对消息进行了哪些业务处理。
另外,Id与Type作为发送消息表和消费消息表的联合主键ID对应,即每一个发送消息表中的ID与每一个消费消息表中的ID一一对应,ID相同但是type不同的两个消息代表一个是发送的消息信息,一个是消费的消息信息,也就是说消息是成对存在的,一个发送一个接收,不成对存在通过数据库比对可以发现,发现后可以进行手工重试,也可以自动重试。
S203,根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理。
因为消息未发送成功,消费端设备就不会接收到异步消息,消费端设备未接收到异步消息,就无法执行业务处理,所以需要根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理。
S204,当异步消息的发送状态是正在接收中或者接收失败时,确定不按照异步消息的消费内容执行业务处理,将异步消息消费记录中的消费状态的标识记为第三标记;当异步消息的发送状态是接收成功时,确定按照异步消息的消费内容执行业务处理,将消费状态的标识由第三标记更新为第四标记。
具体的,在插入异步消息消费记录的时候,会同时写入消息的内容以及消息的消费状态标识,例如,当异步消息的发送状态是正在接收中或者接收失败时,暂时按照异步消息的消费内容执行业务处理,同时将异步消息消费记录中的消费状态的标识记为第三标记;第三标记的标识可以任意设置,例如可以将第三标记记为标识X。只有当消费端接收成功后,才按照异步消息的消息内容执行业务处理,业务处理成功后,更新本异步消息的消费状态的标识,将消费状态的标识由第三标记更新为第四标记,例如,将标识X修改为标识Z,用于表示该条异步消息已消费成功,便于后续的检索、核验与重新消费。本发明实施例通过判断消息是否接收成功,只有接收成功后才执行异步消息的业务处理,避免了消息未接收完成就处理导致业务处理出错,另外,通过在本地消息表中插入消息消费记录,可以随时插线消息的消费情况以及消费状态,便于后续的检索、查询和比对,保障每一条消息都成功消费。
在一些实施例中,如图4所示,为了保证发送的每一条异步消息均被成功消费,还可以通过定时任务中央控制器对本地消费消息表中的异步消息消费记录进行周期性任务检索,具体检索步骤如下:
S205,定时任务中央控制器对本地消费消息表中的异步消息消费记录进行周期性任务检索,获取本地消费消息表中的异步消息消费记录中消费状态标识记为第三标记的异步消息并发送至业务处理模块。
例如,检索周期为五分钟一次,当然,检索周期的长短可以根据实际情况设定,本实施例不做具体限制。
S206,业务处理模块按照异步消息消费记录中消费状态标识记为第三标记的异步消息的消息内容重新执行业务处理。
消息消费失败在本地消息表内都有状态标识的记录,例如每条异步消息消费记录是X,该标识可以任意设置。这些记录中记录了当时消息内容,本发明实施例通过定时任务筛选出第三标记的异步消息,例如,消息消费状态标识为X的记录,得到该异步消息中的消息内容并通过消费端业务处理重新执行,保证消息必消费。
在一些实施例中,虽然通过定时任务检索,可以保证消息的必送达和必消费,但是也有可能触发消费端业务处理的重复执行,此时,可以通过确定在本地消费消息表中插入异步消息消费记录时是否出现报错信息来确定异步消息是否被重复消费,如果出现报错信息,指示不再执行出现报错信息的异步消息消费记录中的消息内容。具体的,通过本地消费消息表中的主键冲突来避免消息的重复消费,即每一个异步消息消费记录都会有一个唯一的ID与之对应,当ID相同的两条记录同时插入时,只能有一个会插入成功,插入另一个时就会出现报错信息。因此可以根据地消息表的主键冲突来保证消息不会重复消费。另外,由发送端重发导致的消费端业务处理重复执行,由发送端自己保证消息发送的幂等。
在一些实施例中,还可以通过批量处理更新本地消费消息表中插入的异步消息消费记录;按照异步消息消费记录中异步消息的ID对异步消息消费记录进行排序。因为在异步消息高并发的场景下瞬间会有万条异步消息消费记录需要批量落入数据库的本地消费消息表,在批量对数据库的数据做更新操作,对这一批异步消息根据其消息ID做排序,可以避免数据库死锁。
本发明实施例的有益效果如下:
本发明实施例通过判断消息是否接收成功,只有接收成功后才执行异步消息的业务处理,避免了消息未接收完成就处理导致业务处理出错,另外,通过在本地消息表中插入消息消费记录,可以随时插线消息的消费情况以及消费状态,便于后续的检索、查询和比对,保障每一条消息都成功消费;
本发明实施例通过定时任务筛选出第三标记的异步消息,例如,消息消费状态标识为X的记录,得到该异步消息中的消息内容并通过消费端业务处理重新执行,保证消息必消费;
本发明实施例通过对本地消费消息表中的数据进行批量更新与排序,避免数据库死锁。
实施例三
图5是本发明提供的一种分布式异步数据通讯的处理方法的流程图。如图5所示,该处理方法包括如下步骤:
S301,发送端设备接收到发送业务操作的命令后,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库;
S302,发送端设备发送一条异步消息到消息队列;
S303,发送端设备监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,异步消息发送记录包括异步消息的发送内容及发送状态的标识;
S304,当异步消息正在发送中或者发送失败时,发送端设备将异步消息发送记录中的发送状态的标识记为第一标记;当消息队列接收异步消息成功后,发送端设备将异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;
S305,消费端设备接收消息队列中的异步消息;
S306,消费端设备在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,异步消费消息记录包括异步消息的消费内容及消费状态的标识;
S307,消费端设备根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理;
S308,当异步消息的发送状态是正在接收中或者接收失败时,消费端设备确定不按照异步消息的消费内容执行业务处理,将异步消息消费记录中的消费状态的标识记为第三标记;当异步消息的发送状态是接收成功时,消费端设备确定按照异步消息的消费内容执行业务处理,将消费状态的标识由第三标记更新为第四标记。
在一些实施例中,由于异步消息在发送至消息队列后,消费端还没有消费此异步消息,此时消息队列中的异步消息可能会意外丢失,如消息队列的机器损坏等。此时发送端本地发送消息表有记录,但是消费端本地消费消息表没有记录。因为正常的异步消息的发送与消费是成对出现的,有一条发送记录就会有一条消费记录与之对应。此时,发送端设备就会将本地消息发送表中的异步消息发送记录与本地消费消息表中的异步消息消费记录进行比对,确定异步消息发送记录与异步消息消费记录是否一一对应;如果否,发送端设备将没有一一对应的异步消息发送表中的异步消息发送记录重新发送至消息队列;消费端设备按照异步消息发送记录中的消息内容重新执行业务处理。本发明实施例通过比对,将没有成对出现的消息记录找到,在发送端页面重发消息,保证消息必送达、必消费,极大的提高了异步数据通讯的可靠性。
作为一个举例说明,本地发送消息表和本地消费消息表中均包含但不限于如下内容:
Id:每一个消息ID都标识一笔业务消息;相同的消息ID有两条记录,一条是消息发送记录,一条是消息消费记录;
Type:消息类型,发送消息表和消费消息表中会有对应的类型标识,例如,L标识消费端消息,S标识发送端消息;
Retry:消息重试次数,消息自动重试有次数限制,超过三次不再支持重试,即消息重复发送或者重复消费的次数不超过三次;
Time:消息生产的时间;发送消息表有发送消息的时间,当消息发送状态长时间处于发送中(标识N)的状态时(比如当时服务器宕机,消息发送没有成功),此时将自动重新发送该消息;或者,通过距离当前时间超过一定时间(如30分钟)并且消息状态为标识N时,也会将此类消息检索出来做自动重试;发送端的消息重试是重新发送消息体到消息队列,消费端的消息重试是直接重试业务逻辑,通过消息类型做不同的重试处理;
Content:消息内容;
Flag:是否人工重试的标识,用于标识此消息是人工重试的还是自动重试;
BIZ:批次号,代表是同一批业务处理的消息;同一笔业务中的多条消息会具有相同的批次号,通过批次号可以监控到消息处理的链路,即对消息进行了哪些业务处理。
另外,Id与Type作为发送消息表和消费消息表的联合主键ID对应,即每一个发送消息表中的ID与每一个消费消息表中的ID一一对应,ID相同但是type不同的两个消息代表一个是发送的消息信息,一个是消费的消息信息,也就是说消息是成对存在的,一个发送一个接收,不成对存在通过数据库比对可以发现,发现后可以进行手工重试,也可以自动重试。本发明实施例的有益效果如下:
为了使本领域技术人员更加理解本发明实施例提供的技术方案,下面对本发明实施例提供的一种分布式异步数据处理方法进行详细说明。图6是本发明实施例提供的一种分布式异步数据处理方法的整体流程部署图,具体的:
S1,发送端设备接收到发送业务操作的命令后,触发数据库事务提交;
S2,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库;
S3,发送端设备发送一条异步消息到消息队列,并监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,异步消息发送记录包括异步消息的发送内容及发送状态的标识;
S4,发送端设备在确定消息队列接收异步消息成功;
S5,更新异步消息发送记录中的发送状态的标识;
S6,消费端设备接收消息队列中的异步消息并按照消息内容进行消费;
S7,消费端设备在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,异步消费消息记录包括异步消息的消费内容及消费状态的标识;
S8,消费端设备确定按照异步消息的消费内容执行业务处理完成;
S9,更新将本地消费消息表中的异步消息记录的消费状态的标识。
本发明实施通过在本地发送消息表中插入每一条异步消息发送记录,能够随时监测并记录消息的发送状态,便于查询未发送成功的消息,以保障消息必送达;
本发明实施通过周期性的对本地发送消息表中的异步消息发送记录进行检索,能够保证每一个异步消息都成功发送至消息队列,从而提高了发送端发送消息的可靠性;
本发明实施例通过判断消息是否接收成功,只有接收成功后才执行异步消息的业务处理,避免了消息未接收完成就处理导致业务处理出错,另外,通过在本地消息表中插入消息消费记录,可以随时插线消息的消费情况以及消费状态,便于后续的检索、查询和比对,保障每一条消息都成功消费;
本发明实施例通过定时任务筛选出第三标记的异步消息,例如消息消费状态标识为X的记录,得到该异步消息中的消息内容并通过消费端业务处理重新执行,保证消息必消费;
本发明实施例通过对本地发送消息表和本地消费消息表中的数据进行批量更新与排序,避免数据库死锁;
本发明实施例通过比对,将没有成对出现的消息记录找到,在发送端页面重发消息,保证消息必送达、必消费,极大的提高了异步数据通讯的可靠性。
本发明实施例的具体实施方式请参见实施例一和实施例二。
实施例四
图7是本发明实施例提供的一种分布式异步数据通讯的处理装置100的功能框图。如图7所示,其应用于发送端设备,该装置100包括:
数据库事务单元110,用于当接收到发送业务操作的命令后,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库;
发送单元120,用于发送一条异步消息到消息队列;
状态监测及发送记录单元130,用于监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录,异步消息发送记录包括异步消息的发送内容及发送状态的标识;
发送状态更新单元140,用于当异步消息正在发送中或者发送失败时,将异步消息发送记录中的发送状态的标识记为第一标记;当消息队列接收异步消息成功后,将异步消息发送记录中的发送状态的标识由第一标记更新为第二标记。
相关细节可参考图1所示的方法实施例。
本发明实施通过在本地发送消息表中插入每一条异步消息发送记录,能够随时监测并记录消息的发送状态,便于查询未发送成功的消息,以保障消息必送达;
本发明实施通过周期性的对本地发送消息表中的异步消息发送记录进行检索,能够保证每一个异步消息都成功发送至消息队列,从而提高了发送端发送消息的可靠性;
本发明实施例通过对本地发送消息表中的数据进行批量更新与排序,避免数据库死锁。
实施例五
图8是本发明实施例提供的一种分布式异步数据通讯的处理装置200的功能框图。如图8所示,其应用于消费端设备,该装置200包括:
接收单元210,用于接收消息队列中的异步消息;
消费记录单元220,用于在本地消费消息表中插入一条与异步消息对应的异步消息消费记录,异步消息消费记录包括异步消息的消费内容及消费状态的标识;
确定单元230,用于根据异步消息的发送状态确定是否按照异步消息的消费内容执行业务处理;
消费状态更新单元240,用于当异步消息的发送状态是正在接收中或者接收失败时,确定不按照异步消息的消费内容执行业务处理,将异步消息消费记录中的消费状态的标识记为第三标记;当异步消息的发送状态是接收成功时,确定按照异步消息的消费内容执行业务处理,将消费状态的标识由第三标记更新为第四标记。
相关细节可参考图3所示的方法实施例。
本发明实施例通过判断消息是否接收成功,只有接收成功后才执行异步消息的业务处理,避免了消息未接收完成就处理导致业务处理出错,另外,通过在本地消息表中插入消息消费记录,可以随时插线消息的消费情况以及消费状态,便于后续的检索、查询和比对,保障每一条消息都成功消费;
本发明实施例通过定时任务筛选出第三标记的异步消息,例如,消息消费状态标识为X的记录,得到该异步消息中的消息内容并通过消费端业务处理重新执行,保证消息必消费;
本发明实施例通过对本地消费消息表中的数据进行批量更新与排序,避免数据库死锁。
实施例六
图9是本发明实施例提供的一种分布式异步数据通讯的处理系统300的功能框图。如图9所示,该系统300包括发送端设备310、消息队列320和消费端设备330;
发送端设备310,用于当接收到发送业务操作的命令后,执行业务操作的数据库事务提交,使得业务操作的业务数据落入数据库;发送一条异步消息到消息队列320,监测异步消息的发送状态并在本地发送消息表中插入一条与异步消息对应的异步消息发送记录;当异步消息正在发送中或者发送失败时,将异步消息发送记录中的发送状态的标识记为第一标记;当消息队列接收异步消息成功后,将异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;
消费端设备320,用于接收消息队列320中的异步消息,并在本地消费消息表中插入一条与异步消息对应的异步消息消费记录;当异步消息的发送状态是正在接收中或者接收失败时,确定不按照异步消息的消费内容执行业务处理,将异步消息消费记录中的消费状态的标识记为第三标记;当异步消息的发送状态是接收成功时,确定按照异步消息的消费内容执行业务处理,将消费状态的标识由第三标记更新为第四标记。本发明实施通过在本地发送消息表中插入每一条异步消息发送记录,能够随时监测并记录消息的发送状态,便于查询未发送成功的消息,以保障消息必送达;
本发明实施通过周期性的对本地发送消息表中的异步消息发送记录进行检索,能够保证每一个异步消息都成功发送至消息队列,从而提高了发送端发送消息的可靠性;
本发明实施例通过判断消息是否接收成功,只有接收成功后才执行异步消息的业务处理,避免了消息未接收完成就处理导致业务处理出错,另外,通过在本地消息表中插入消息消费记录,可以随时插线消息的消费情况以及消费状态,便于后续的检索、查询和比对,保障每一条消息都成功消费;
本发明实施例通过定时任务筛选出第三标记的异步消息,例如消息消费状态标识为X的记录,得到该异步消息中的消息内容并通过消费端业务处理重新执行,保证消息必消费;
本发明实施例通过对本地发送消息表和本地消费消息表中的数据进行批量更新与排序,避免数据库死锁;
本发明实施例通过比对,将没有成对出现的消息记录找到,在发送端页面重发消息,保证消息必送达、必消费,极大的提高了异步数据通讯的可靠性。
具体细节请参考图5所示的方法实施例。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
实施例七
如图10所示,本发明实施例还提供了一种计算机可读存储介质400,计算机可读存储介质400内存储有计算机程序410,该计算机程序410被处理器执行时,实现如上述图1、图3和图5所示任意一种分布式异步数据通讯的处理方法。
图1、图3以及图5所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
实施例八
图11是本发明的一个实施例电子设备的结构示意图。请参考图11,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是工业标准体系结构ISA总线、外设部件互连标准PCI总线或扩展工业标准结构EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成基于集中配置的自动化容灾系统。处理器,执行存储器所存放的程序,并具体用于执行图1和图3所示的任意一种分布式异步数据通讯的处理方法。
上述如图1和图3所示实施例揭示的分布式异步数据的通讯方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(CentralProcessing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
当然,除了软件实现方式之外,本发明的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本发明提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。
本发明是参照根据本发明实施例的方法、设备、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (11)
1.一种分布式异步数据通讯的处理方法,应用于发送端设备,其特征在于,所述处理方法包括:
当接收到发送业务操作的命令后,对提交的业务数据进行校验,对校验合法的业务数据执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
每当有一个业务操作需要处理时,发送一条异步消息到消息队列;
监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;其中,所述本地发送消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息发送记录;消息类型标识发送端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;通过批量处理更新所述本地发送消息表中插入的异步消息发送记录,所述本地发送消息表使用独立的数据库连接池和独立事务;按照所述异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行升序排序;
当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;
对所述本地发送消息表中的异步消息发送记录进行周期性的任务检索,以检索出发送状态的标识为第一标记的目标异步消息发送记录;
将所述目标异步消息发送记录中的所述异步消息的发送内容重新发送至所述消息队列;
监听消费端对每一个异步消息的消息内容的业务操作情况。
2.一种分布式异步数据通讯的处理方法,应用于消费端设备,其特征在于,所述处理方法包括:
接收消息队列中的异步消息;
在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消息消费记录包括所述异步消息的消费内容及消费状态的标识;其中,所述本地消费消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息消费记录;消息类型标识消费端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;
所述本地消费消息表中的所述消息ID与本地发送消息表中的消息ID一一对应,每一个异步消息消费记录都有一个唯一的消息ID与之对应,当所述消息ID相同的两条记录同时插入时,只能有一个插入成功,插入另一个时会出现报错信息;
通过批量处理更新所述本地消费消息表中插入的异步消息消费记录,所述本地消费消息表使用独立的数据库连接池和独立事务;按照所述异步消息消费记录中异步消息的ID对所述异步消息消费记录进行排序;
根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记;
通过定时任务中央控制器对所述本地消费消息表中的异步消息消费记录进行周期性任务检索。
3.根据权利要求2所述的方法,其特征在于,在按照所述异步消息执行业务处理后,更新所述异步消息消费记录中的消费状态的标识之后,还包括:
对所述本地消费消息表中的异步消息消费记录进行周期性任务检索,获取所述异步消息消费记录中消费状态标识记为第三标记的异步消息的消息内容;
按照所述异步消息消费记录中消费状态标识记为第三标记的异步消息的消息内容重新执行业务处理。
4.根据权利要求3所述的方法,其特征在于,所述处理方法还包括:
确定在本地消费消息表中插入异步消息消费记录时是否出现报错信息;
如果出现报错信息,指示不再执行出现报错信息的异步消息消费记录中的消息内容。
5.一种分布式异步数据通讯的处理方法,其特征在于,所述处理方法包括:
发送端设备接收到发送业务操作的命令后,对提交的业务数据进行校验,对校验合法的业务数据执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
每当有一个业务操作需要处理时,发送端设备发送一条异步消息到消息队列;
发送端设备监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;其中,所述本地发送消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息发送记录;消息类型标识发送端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;通过批量处理更新所述本地发送消息表中插入的异步消息发送记录,所述本地发送消息表使用独立的数据库连接池和独立事务;按照所述异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行升序排序;
当所述异步消息正在发送中或者发送失败时,发送端设备将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,发送端设备将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;对所述本地发送消息表中的异步消息发送记录进行周期性的任务检索,以检索出发送状态的标识为第一标记的目标异步消息发送记录;将所述目标异步消息发送记录中的所述异步消息的发送内容重新发送至所述消息队列;监听消费端对每一个异步消息的消息内容的业务操作情况;
消费端设备接收消息队列中的异步消息;
消费端设备在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消息消费记录包括所述异步消息的消费内容及消费状态的标识;其中,所述本地消费消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息消费记录;消息类型标识消费端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;所述本地消费消息表中的所述消息ID与所述本地发送消息表中的所述消息ID一一对应,每一个异步消息消费记录都有一个唯一的消息ID与之对应,当所述消息ID相同的两条记录同时插入时,只能有一个插入成功,插入另一个时会出现报错信息;
通过批量处理更新所述本地消费消息表中插入的异步消息消费记录,所述本地消费消息表使用独立的数据库连接池和独立事务;按照所述异步消息消费记录中异步消息的ID对所述异步消息消费记录进行排序;
消费端设备根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
当所述异步消息的发送状态是正在接收中或者接收失败时,消费端设备确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,消费端设备确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记;
通过定时任务中央控制器对所述本地消费消息表中的异步消息消费记录进行周期性任务检索。
6.根据权利要求5所述的处理方法,其特征在于,所述处理方法还包括:
所述发送端设备将所述本地发送消息表中的异步消息发送记录与所述本地消费消息表中的异步消息消费记录进行比对,确定所述异步消息发送记录与所述异步消息消费记录是否一一对应;如果否,所述发送端设备将没有一一对应的异步消息发送表中的异步消息发送记录重新发送至所述消息队列;
所述消费端设备按照所述异步消息发送记录中的消息内容重新执行业务处理。
7.一种分布式异步数据通讯的处理装置,应用于发送端设备,其特征在于,所述装置包括:
数据库事务单元,用于当接收到发送业务操作的命令后,对提交的业务数据进行校验,对校验合法的业务数据执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;
发送单元,用于每当有一个业务操作需要处理时,发送一条异步消息到消息队列;
状态监测及发送记录单元,用于监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录,所述异步消息发送记录包括所述异步消息的发送内容及发送状态的标识;其中,所述本地发送消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息发送记录;消息类型标识发送端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;通过批量处理更新所述本地发送消息表中插入的异步消息发送记录,所述本地发送消息表使用独立的数据库连接池和独立事务;按照所述异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行升序排序;
发送状态更新单元,用于当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记。
8.一种分布式异步数据通讯的处理装置,应用于消费端设备,其特征在于,所述装置包括:
接收单元,用于接收消息队列中的异步消息;
消费记录单元,用于在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录,所述异步消息消费记录包括所述异步消息的消费内容及消费状态的标识;其中,所述本地消费消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息消费记录;消息类型标识消费端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;所述本地消费消息表中的所述消息ID与本地发送消息表中的所述消息ID一一对应,每一个异步消息消费记录都有一个唯一的消息ID与之对应,当所述消息ID相同的两条记录同时插入时,只能有一个插入成功,插入另一个时会出现报错信息;通过批量处理更新所述本地消费消息表中插入的异步消息消费记录,所述本地消费消息表使用独立的数据库连接池和独立事务;按照所述异步消息消费记录中异步消息的ID对所述异步消息消费记录进行排序;
确定单元,用于根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;
消费状态更新单元,当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记;通过定时任务中央控制器对所述本地消费消息表中的异步消息消费记录进行周期性任务检索。
9.一种分布式异步数据通讯的处理系统,其特征在于,所述系统包括:发送端设备、消息队列和消费端设备;
所述发送端设备,用于当接收到发送业务操作的命令后,对提交的业务数据进行校验,对校验合法的业务数据执行所述业务操作的数据库事务提交,使得所述业务操作的业务数据落入数据库;每当有一个业务操作需要处理时,发送一条异步消息到所述消息队列,监测所述异步消息的发送状态并在本地发送消息表中插入一条与所述异步消息对应的异步消息发送记录;其中,所述本地发送消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息发送记录;消息类型标识发送端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;通过批量处理更新所述本地发送消息表中插入的异步消息发送记录,所述本地发送消息表使用独立的数据库连接池和独立事务;按照所述异步消息记录中的异步消息的ID对更新后的异步消息发送记录进行升序排序;当所述异步消息正在发送中或者发送失败时,将所述异步消息发送记录中的发送状态的标识记为第一标记;当确定所述消息队列接收所述异步消息成功后,将所述异步消息发送记录中的发送状态的标识由第一标记更新为第二标记;对所述本地发送消息表中的异步消息发送记录进行周期性的任务检索,以检索出发送状态的标识为第一标记的目标异步消息发送记录;将所述目标异步消息发送记录中的所述异步消息的发送内容重新发送至所述消息队列;监听消费端对每一个异步消息的消息内容的业务操作情况;
所述消费端设备,用于接收所述消息队列中的异步消息,并在本地消费消息表中插入一条与所述异步消息对应的异步消息消费记录;其中,所述本地消费消息表包括:消息ID、消费类型、消息生产的时间、消息重试的次数、消息内容、是否人工重试的标识以及批次号;其中,消息ID表示一条消息消费记录;消息类型标识消费端消息;消息重试次数表示消息自动重试有次数限制,超过三次不再支持重试;批次号代表是同一批业务处理的消息,同一笔业务中的多条消息具有相同的批次号,通过所述批次号监控消息处理的链路;消息生产的时间是指发送消息的时间,将当前时间距离发送消息的时间超过一定时间并且消息状态为发送中的状态的消息检索出来做自动重试;所述本地消费消息表中的所述消息ID与所述本地发送消息表中的所述消息ID一一对应,每一个异步消息消费记录都有一个唯一的消息ID与之对应,当所述消息ID相同的两条记录同时插入时,只能有一个插入成功,插入另一个时会出现报错信息;通过批量处理更新所述本地消费消息表中插入的异步消息消费记录,所述本地消费消息表使用独立的数据库连接池和独立事务;按照所述异步消息消费记录中异步消息的ID对所述异步消息消费记录进行排序;根据所述异步消息的发送状态确定是否按照所述异步消息的消费内容执行业务处理;当所述异步消息的发送状态是正在接收中或者接收失败时,确定不按照所述异步消息的消费内容执行业务处理,将所述异步消息消费记录中的消费状态的标识记为第三标记;当所述异步消息的发送状态是接收成功时,确定按照所述异步消息的消费内容执行业务处理,将所述消费状态的标识由所述第三标记更新为第四标记;通过定时任务中央控制器对所述本地消费消息表中的异步消息消费记录进行周期性任务检索。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任意一项所述的分布式异步数据通讯的处理方法。
11.一种电子设备,其特征在于,其包括:处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1-4中任意一项所述的分布式异步数据通讯的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111459260.1A CN114116262B (zh) | 2021-12-02 | 2021-12-02 | 一种分布式异步数据通讯的处理方法、装置、介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111459260.1A CN114116262B (zh) | 2021-12-02 | 2021-12-02 | 一种分布式异步数据通讯的处理方法、装置、介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114116262A CN114116262A (zh) | 2022-03-01 |
CN114116262B true CN114116262B (zh) | 2022-08-23 |
Family
ID=80365356
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111459260.1A Active CN114116262B (zh) | 2021-12-02 | 2021-12-02 | 一种分布式异步数据通讯的处理方法、装置、介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116262B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115001998B (zh) * | 2022-04-26 | 2024-02-23 | 北京贝壳时代网络科技有限公司 | 一种消息服务的容灾方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367628A (zh) * | 2020-03-05 | 2020-07-03 | 中国银行股份有限公司 | 分布式事务的处理方法、装置及消息生产方、消费方系统 |
CN112822091A (zh) * | 2019-11-18 | 2021-05-18 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8516498B2 (en) * | 2003-10-31 | 2013-08-20 | Microsoft Corporation | Handling a delivery failure as a program exception in a distributed asynchronous architecture |
US10678574B1 (en) * | 2017-11-01 | 2020-06-09 | Amazon Technologies, Inc. | Reconfiguration rate-control |
US20190313157A1 (en) * | 2018-04-09 | 2019-10-10 | James Fitzgerald | System and Method for a Scalable IPTV Recorder and Cloud DVR |
CN108874562B (zh) * | 2018-06-21 | 2022-08-02 | 北京顺丰同城科技有限公司 | 分布式高并发消息队列推送系统 |
CN109660451A (zh) * | 2018-12-25 | 2019-04-19 | 北京云中融信网络科技有限公司 | 一种发送消息的方法、装置及消息收发系统 |
CN110505315A (zh) * | 2019-09-27 | 2019-11-26 | 北京锐安科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN112437001B (zh) * | 2020-11-16 | 2023-01-24 | 深圳壹账通智能科技有限公司 | 保证消息可靠性投递与消费方法、装置 |
CN113094362B (zh) * | 2021-04-30 | 2024-04-16 | 中国银行股份有限公司 | 一种异步消息可靠投递和处理的方法和装置 |
-
2021
- 2021-12-02 CN CN202111459260.1A patent/CN114116262B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112822091A (zh) * | 2019-11-18 | 2021-05-18 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
CN111367628A (zh) * | 2020-03-05 | 2020-07-03 | 中国银行股份有限公司 | 分布式事务的处理方法、装置及消息生产方、消费方系统 |
Non-Patent Citations (2)
Title |
---|
ITXC:一种基于事务消息的分布式事务方案;彭亮等;《电信技术》;20170525(第05期);第63-66页 * |
Modelling and simulation of asynchronous real-time systems using Timed Rebeca;Arni Hermann等;《Science of Computer Programming》;20140125;第89卷(第1期);第41-68页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114116262A (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114116262B (zh) | 一种分布式异步数据通讯的处理方法、装置、介质和设备 | |
CN107133233B (zh) | 一种配置数据查询的处理方法及装置 | |
CN108170551B (zh) | 基于爬虫系统的前后端错误处理方法、服务器及存储介质 | |
CN114035987A (zh) | 基于消息队列的数据传输方法、装置、电子设备及介质 | |
CN111782431A (zh) | 一种异常的处理方法、装置、终端及存储介质 | |
CN111125240B (zh) | 一种分布式事务实现方法、装置、电子设备及存储介质 | |
CN110941622A (zh) | 一种数据处理方法及装置 | |
CN111782502A (zh) | 一种自动化测试的方法及装置 | |
CN110597794B (zh) | 数据处理方法、装置和电子设备 | |
CN111782679A (zh) | 数据处理过程的监管方法、装置、计算机设备及存储介质 | |
CN113127217A (zh) | 数据发布方法、装置、设备及存储介质 | |
CN110727895A (zh) | 一种敏感词发送方法、装置、电子设备及存储介质 | |
CN114706697A (zh) | 消息订阅事件的处理方法、装置、设备、介质及程序产品 | |
EP1710759A1 (en) | Terminal equipment | |
CN114880194A (zh) | 服务异常监控方法、装置、电子设备及计算机存储介质 | |
CN114372072A (zh) | 数据存储方法、装置、设备、计算机存储介质及程序产品 | |
CN110147379B (zh) | 基于数据锁的信息采集方法、装置、计算机设备 | |
CN112764818A (zh) | 设备管理方法、装置、电子设备及可读存储介质 | |
CN111339174A (zh) | 数据交换的方法、装置、可读性存储介质及数据交换系统 | |
CN111063092B (zh) | 基于区块链的抽奖方法、装置、电子设备及存储介质 | |
CN112667447B (zh) | 一种数据修复方法及装置 | |
CN114637758A (zh) | 一种交易处理的方法和装置 | |
CN115495313A (zh) | 理财代销业务异常数据人工校验方法、装置及设备 | |
CN115604281A (zh) | 理财代销业务异步数据处理方法、装置、设备及存储介质 | |
CN114510507A (zh) | 一种数据校验方法、装置、终端设备及介质 |
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 |