消息同步方法及装置与流程

文档序号:22804041发布日期:2020-11-04 04:06阅读:124来源:国知局
消息同步方法及装置与流程

本发明涉及数据处理技术领域,尤其涉及一种消息同步方法及装置。



背景技术:

随着微服务的流行,数据的分布式存储,导致消息传输的一致性变得愈加复杂。目前分布式系统间,消息传输主要是通过发布订阅消息系统,比如kafka,进行消息同步。

现有的消息同步方式有:(一)发送并忘记:消息生产者发送消息后,不关心是否发送成功。(二)同步发送:消息生产者逐条发送消息给消息消费者;消息生产者获取到消息返回的结果,才继续下一条消息的发送。(三)异步发送:消息生产者发送消息的同时,指定回调函数;消费者处理消息时,调用回调函数;回调函数执行完毕后,消息生产者结束发送。

但是,发送并忘记的方式,消息处理吞吐量大,但无法保证消息的可靠性;而同步发送和异步发送方式,可以保证消息的可靠性,但是消息处理流程复杂,消息发送容易阻塞,消息处理吞吐量较小。



技术实现要素:

本发明实施例提供一种消息同步方法,用以保证消息可靠性的同时,提高消息处理的吞吐量,该方法包括:

在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;

根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;

循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:

每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;

根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。

本发明实施例还提供一种消息同步装置,用以保证消息可靠性的同时,提高消息处理的吞吐量,该装置包括:

消息存储模块,用于在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;

第一状态更新模块,用于根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;

循环模块,用于调用重发模块和第二状态更新模块,循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:

重发模块,用于每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;

第二状态更新模块,用于根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述消息同步方法。

本发明实施例也提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述消息同步方法的计算机程序。

本发明实施例中,通过在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。根据消息消费者对消息生产者所发布消息的处理数据,可确定所发布消息是否发送成功,并更新数据库中的消息对应的状态信息,以此为依据重新发布,保证了消息可靠性;在数据库中,记录消息对应的状态信息,并以此为依据确定每条消息是否需要重新发布,不占用消息生产者和消息消费者的处理进程,从而减少了消息发送过程中阻塞的发生,进而提高消息处理的吞吐量。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中消息同步方法的示意图。

图2为本发明一具体实施例中消息同步方法的示意图。

图3为本发明另一具体实施例中消息同步方法的示意图。

图4为本具体应用实施中的消息同步系统的具体工作时序逻辑图。

图5为本发明实施例中消息同步装置的示意图。

图6为本发明一具体实施例中消息同步装置的示意图。

图7为本发明另一具体实施例中消息同步装置的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种消息同步方法,用以保证消息可靠性的同时,提高消息处理的吞吐量,如图1所示,该方法包括:

步骤101:在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;

步骤102:根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;

步骤103:循环执行以下步骤104-105,直至数据库中记录的所有消息对应的状态信息为第一预设值:

步骤104:每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;

步骤105:根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。

由图1所示流程可以得知,本发明实施例中,通过在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。根据消息消费者对消息生产者所发布消息的处理数据,可确定所发布消息是否发送成功,并更新数据库中的消息对应的状态信息,以此为依据重新发布,保证了消息可靠性;在数据库中,记录消息对应的状态信息,并以此为依据确定每条消息是否需要重新发布,不占用消息生产者和消息消费者的处理进程,从而减少了消息发送过程中阻塞的发生,进而提高消息处理的吞吐量。

具体实施时,首先在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库。其中,状态信息包括:消息的实时状态和重发次数,消息的实时状态是对消息发送后的状态的记录,例如可以是消息已发送(待消息消费者处理)、无需重发(消息消费者已处理)、需重发(消息已发送但消息消费者未处理)等状态。重发次数是指消息生产者对该条消息已经重复发送的次数。

将消息和对应的状态信息存入数据库后,接收消息消费者对消息的处理结果,根据消息消费者对消息的处理结果,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库。具体实施时,消息消费者反馈了对消息的处理结果,消息消费者已经接收消息并处理,则消息对应的新的状态信息为:实时状态为无需重发;消息消费者未反馈对消息的处理结果或反馈消息消费者未接收到消息等,消息消费者未处理消息,则消息对应的新的状态信息为:实时状态为需重发。

将消息对应的新的状态信息,更新至数据库后,循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:

每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;

根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。

其中,第一预设值为:消息的实时状态为无需重发或重发次数等于预定阈值。预定阈值是指预先设定的消息可重发的最大次数,例如可以取50、100等,可根据实际需要进行设置。第二预设值为:消息的实时状态为需重发且重发次数小于预定阈值。第一预定时间间隔是预定的重发时间间隔,例如可以是5分钟、10分钟或30分钟,根据消息处理的速度来设置时长,略大于消息生产者发送消息至消息消费者反馈消息处理结果的时长即可。

只要消息需要重发且重发次数小于预定阈值,重新发送消息并记录重发后的状态信息,更新至数据库,直至消息无需重发或消息的重发次数等于设定的预定阈值。具体实施时,根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库,包括:在重新发布消息后,将重新发布的消息对应的重发次数加一,更新至数据库。

由于消息的重发次数等于设定的预定阈值时,将结束重新发送的循环,但此种情况下的消息并未被消息消费者处理,但重发次数已经达到阈值,为了避免一直重发,浪费资源,本发明一具体实施例还提供一种消息同步方法,如图2所示,在图1的基础上还包括:

步骤201:每隔第二预定时间间隔,从数据库中,获取状态信息为第三预设值的消息;

步骤202:将状态信息为第三预设值的消息,批量发布;

步骤203:根据消息消费者对批量发布的消息的处理数据,确定批量发布的消息对应的新的状态信息,将批量发布的消息对应的新的状态信息,更新至数据库。

其中,第三预设值为消息的实时状态为需重发且重发次数等于预定阈值。

其中,第二预定时间间隔为预先设定的批量发送的时间间隔,为了避免资源浪费,可根据实际需要,统计状态信息为第三预设值的消息数量达到一定数量所用的平均时长,将此平均时长设置为第二预定时间间隔。

步骤203具体实施时,包括:在批量发布消息后,将批量发布的消息对应的重发次数加一,更新至数据库。

由于批量发送后仍然存在未被消息消费者处理的消息,本发明另一具体实施例还提供一种消息同步方法,如图3所示,在图2的基础上还包括:

步骤301:将数据库中状态信息为第四预设值的消息及对应的状态信息导出,生成异常消息数据;

步骤302:在数据库中删除状态信息为第四预设值的消息及对应的状态信息。

其中,第四预设值为消息的实时状态为需重发且重发次数大于预定阈值。

具体实施时,可以将生成的异常消息数据提供给业务操作人员,业务操作人员查明可根据生成的异常消息数据,排查一直未被消息消费者处理的原因,后续根据排查出的出错原因,调整消息提供给消息生产者重新发送,或业务操作人员手工重新发送,以使达到所有消息同步的目的。

下面给出一具体实例说明本发明实施例如何进行消息同步。本例为应用本发明实施例提供的消息同步方法所开发的消息同步系统。

本具体应用实施,提供一种基于发布订阅消息子系统、数据库和批量程序的消息同步系统,在本地数据库中,记录消息内容、消息状态以及消息是否为异常消息。如果消息发送失败,可以通过批量程序,轮询本地数据库获取同步失败的消息列表,对其进行重发,若重发多次仍然发送失败,进行批量文本补处理以及异常消息标注处理,以实现通信双方消息的一致性。其中,发布订阅是一种消息范式,发布订阅消息子系统有消息生产者、消息消费者和主题等,消息生产者发布消息到指定主题的分区,该主题可以被多个消息消费者订阅。

消息同步系统加入了本地消息记录和补偿机制,消息同步系统会在本地数据库中记录消息内容、消息结果和是否为异常消息的标识。

消息生产者发送消息后,在本地数据库存储消息,此时消息同步系统无需依赖消息处理结果即可处理下一条消息,消息消费者处理过消息后将返回处理结果,消息同步系统会将处理结果更新到数据库中。

如果未收到消息处理结果,批量重发程序会定时轮询数据库,对发送失败的消息进行重发n次的处理。

如果重发n次还未成功,批量文本补处理程序会将此类消息生成待处理文本,发送给消息消费者。消息消费者处理后再以文本的方式返回给消息生产者,消息生产者根据返回的文本内容更新数据库中消息对应的状态信息。

如果返回的文本中,还有处理失败的消息,此时可以设定这部分消息是异常消息,需要在数据库中将这些消息标注为异常消息,在数据库中删除异常消息对应的数据内容。使得批量文本补处理程序在后续生成待处理文本时会过滤掉这些异常消息,降低异常消息对系统资源不必要的占用,并将这些异常消息生成异常信息文本,方便人工排查处理。这样同时保证了消息的吞吐量和可靠性,并可以排除异常消息的干扰。

如图4所示,为本具体应用实施中的消息同步系统的具体工作时序逻辑图,包括:

1.1、消息生成模块(生产者):生成和发布消息,并写入数据库消息状态表。

1.2、消息处理模块(消费者):读取并处理消息,处理后反馈处理结果消息给生产者。

1.3、消息处理模块(生产者):读取并处理反馈消息,更新数据库消息状态表。

2.1、消息补偿模块(生产者):轮询数据库中处理失败且重发次数小于n的记录,重新发送n次,并更新数据库中该记录的重发次数。

2.2、消息处理模块(消费者):读取并处理消息。处理后反馈处理结果消息。

2.3、消息处理模块(生产者):读取并处理反馈消息,更新数据库消息状态表。

3.1、消息补偿模块(生产者):轮询数据库处理失败且重发次数大于等于n的非异常消息,生成待处理文本,并发送给消费者。

3.2、消息批量核对模块(消费者):获取和处理生产者提供的待处理文本,附上每条消息的处理结果生成新文本,之后将新文本发送给生产者。

3.3、消息批量处理模块(生产者):获取消费者提供的新文本,将新文本中消息的处理状态更新到数据库、标注出异常消息,并生成异常消息文本。

上述具体应用的实施仅为举例,其余实施方式不再一一赘述。

基于同一发明构思,本发明实施例还提供一种消息同步装置,由于消息同步装置所解决问题的原理与消息同步方法相似,因此消息同步装置的实施可以参见消息同步方法的实施,重复之处不再赘述,具体结构如图5所示:

消息存储模块501,用于在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;

第一状态更新模块502,用于根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;

循环模块503,用于调用重发模块504和第二状态更新模块505,循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:

重发模块504,用于每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;

第二状态更新模块505,用于根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。

具体实施时,消息的状态信息包括:消息的实时状态和重发次数;第一预设值为:消息的实时状态为无需重发或重发次数等于预定阈值;第二预设值为:消息的实时状态为需重发且重发次数小于预定阈值。

具体实施例中,重发模块504具体用于:

在重新发布消息后,将重新发布的消息对应的重发次数加一,更新至数据库。

本发明一具体实施例中,还提供一种消息同步装置,如图6所示,在图5的基础上还包括:

批量发布模块601,用于:

每隔第二预定时间间隔,从数据库中,获取状态信息为第三预设值的消息;其中,第三预设值为消息的实时状态为需重发且重发次数等于预定阈值;

将状态信息为第三预设值的消息,批量发布;

根据消息消费者对批量发布的消息的处理数据,确定批量发布的消息对应的新的状态信息,将批量发布的消息对应的新的状态信息,更新至数据库

具体实施时,批量发布模块601具体用于:在批量发布消息后,将批量发布的消息对应的重发次数加一,更新至数据库。

本发明另一具体实施例中,还提供一种消息同步装置,如图7所示,在图6的基础上还包括:异常消息处理模块701,用于:

将数据库中状态信息为第四预设值的消息及对应的状态信息导出,生成异常消息数据;其中,第四预设值为消息的实时状态为需重发且重发次数大于预定阈值;

在数据库中删除状态信息为第四预设值的消息及对应的状态信息。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述消息同步方法。

本发明实施例还提供一种计算机可读存储介质,存储有执行上述消息同步方方法的计算机程序。

综上所述,本发明实施例提供的消息同步方方法及装置具有如下优点:

通过在消息生产者发布消息后,记录消息对应的状态信息,将消息和对应的状态信息存入数据库;根据消息消费者对消息的处理数据,确定消息对应的新的状态信息,将消息对应的新的状态信息,更新至数据库;循环执行以下步骤,直至数据库中记录的所有消息对应的状态信息为第一预设值:每隔第一预定时间间隔,调取数据库中的状态信息为第二预设值的消息,重新发布;根据消息消费者对重新发布的消息的处理数据,确定重新发布的消息对应的新的状态信息,将重新发布的消息对应的新的状态信息,更新至数据库。根据消息消费者对消息生产者所发布消息的处理数据,可确定所发布消息是否发送成功,并更新数据库中的消息对应的状态信息,以此为依据重新发布,保证了消息可靠性;在数据库中,记录消息对应的状态信息,并以此为依据确定每条消息是否需要重新发布,不占用消息生产者和消息消费者的处理进程,从而减少了消息发送过程中阻塞的发生,进而提高消息处理的吞吐量。重发次数达到预定阈值后,批量发送未被成功处理的消息,若消息仍然未成功被成功处理,将此部分的消息标记为异常消息,并导出生成异常消息数据提供给业务操作人员,使得后续重发或批量发送时,过滤掉这些异常消息,降低异常消息对系统资源不必要的占用,并将这些异常消息生成异常信息文本,方便人工排查处理。这样同时保证了消息的吞吐量和可靠性,并排除异常消息的干扰。

本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1