一种数据同步的方法及服务器与流程

文档序号:19250822发布日期:2019-11-27 20:12阅读:157来源:国知局
一种数据同步的方法及服务器与流程

本发明涉及数据通信技术领域,尤其涉及一种数据同步的方法及服务器。



背景技术:

目前,在很多应用场景下,两个系统数据实时同步的过程中,一般请求方式是当前系统在新增或更新数据时,调用目标系统的同步接口把数据传给目标系统,目标系统收到请求后处理数据到目标系统进行存储。在上面这种数据同步方式中,很容易出现高并发时请求超时、请求响应不稳定、服务异常时数据丢失等问题。



技术实现要素:

本发明实施例提供了一种数据同步的方法及服务器,用于高效、稳定的同步数据。

有鉴于此,本发明第一方面提供了一种数据同步的方法,可以包括:

当前服务器的数据发生更新后,获取同步请求;

所述当前服务器根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;

所述当前服务器将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;

所述当前服务器对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据;

所述当前服务器以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理。

可选的,在本发明的一些实施例中,

所述将发生更新的数据向消息队列发送,包括:

将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

可选的,在本发明的一些实施例中,所述方法还包括:

所述当前服务器接收第三方服务器发送的同步数据;

所述当前服务器采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;

所述当前服务器对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,所述方法还包括:

所述当前服务器将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;

当本次同步异常或者同步出错时,根据所述日志记录,所述当前服务器对所述发生更新的数据进行再次同步处理。

本发明第二方面提供了一种服务器,可以包括:

接收模块,用于当前服务器的数据发生更新后,获取同步请求;

处理模块,用于根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据;

发送模块,用于以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理。

可选的,在本发明的一些实施例中,

所述处理模块,具体用于将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

可选的,在本发明的一些实施例中,

所述接收模块,还用于接收第三方服务器发送的同步数据;

所述处理模块,还用于采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,

所述处理模块,还用于将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;当本次同步异常或者同步出错时,根据所述日志记录,对所述发生更新的数据进行再次同步处理。

本发明第三方面提供了一种服务器,可以包括:

收发器,处理器,存储器,其中,所述收发器,所述处理器和所述存储器通过总线连接;

所述存储器,用于存储操作指令;

所述收发器,用于当前服务器的数据发生更新后,获取同步请求;以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理;

所述处理器,用于调用所述操作指令,根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据。

可选的,在本发明的一些实施例中,

所述处理器,具体用于将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

可选的,在本发明的一些实施例中,

所述收发器,还用于接收第三方服务器发送的同步数据;

所述处理器,还用于采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,

所述处理器,还用于将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;当本次同步异常或者同步出错时,根据所述日志记录,对所述发生更新的数据进行再次同步处理。

本发明第四方面提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明第一方面及第一方面任一可选实现方式中所述的数据同步的方法的步骤。

从以上技术方案可以看出,本发明实施例具有以下优点:

在本发明实施例中,当前服务器的数据发生更新后,获取同步请求;所述当前服务器根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;所述当前服务器将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;所述当前服务器对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据;所述当前服务器以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理。当前服务器需要给目标服务器同步数据时,先把需要同步的数据推送给消息队列,这样提高了程序的稳定性,避免高并发时直接请求目标服务器接口时服务器压力过大等问题,且方便做集群部署。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其它的附图。

图1为本发明实施例中数据同步的方法的一个实施例示意图;

图2a为本发明实施例中主要代码的一个逻辑示意图;

图2b为本发明实施例中主要代码的另一个逻辑示意图;

图2c为本发明实施例中主要代码的另一个逻辑示意图;

图2d为本发明实施例中主要代码的另一个逻辑示意图;

图3a为本发明实施例中业务处理的一个代码逻辑示意图;

图3b为本发明实施例中业务处理的另一个代码逻辑示意图;

图3c为本发明实施例中业务处理的另一个代码逻辑示意图;

图3d为本发明实施例中业务处理的另一个代码逻辑示意图;

图3e为本发明实施例中业务处理的另一个代码逻辑示意图;

图3f为本发明实施例中异常日志记录的一个代码逻辑示意图;

图3g为本发明实施例中异常日志记录的另一个代码逻辑示意图;

图3h为本发明实施例中定时任务调用异常请求重发的一个代码逻辑示意图;

图4为本发明实施例中服务器的一个实施例示意图;

图5为本发明实施例中服务器的另一个实施例示意图。

具体实施方式

本发明实施例提供了一种数据同步的方法及服务器,用于高效、稳定的同步数据。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,都应当属于本发明保护的范围。

为了克服上述现有技术中存在的问题,本发明的目的是提供一种基于消息队列实现数据同步的方式,解决了现有技术中存在的问题。实现更稳定、高效地同步数据。

下面以实施例的方式,对本发明技术方案做进一步的说明,如图1所示,为本发明实施例中数据同步的方法的一个实施例示意图,可以包括:

101、当前服务器的数据发生更新后,获取同步请求。

可以理解的是,当前服务器也可以称呼为当前系统,目标服务器也可以称呼为目标系统。

需要说明的是,当前服务器的数据发生更新,可以理解为数据发生新增或者修改,当前服务器获取同步请求。

102、当前服务器根据所述同步请求将发生更新的数据向消息队列发送。

所述将发生更新的数据向消息队列发送,包括:将发生更新的数据以map形式向消息队列发送。例如:将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

示例性的,在当前系统中先把需要同步的数据以map形式存放到队列(这里用到的是apache-activemq消息队列)。

本发明在当前系统发生数据新增或修改以后,将发生变化的数据列以map的形式发往消息队列(例如这里可以使用apache-activemq-5.9.0作为消息队列)中。

103、当前服务器将所述消息队列接收的所述发生更新的数据缓存到本地数据库中。

其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息。

104、所述当前服务器对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据。

用本发明作为队列的消费者去接收队列中的数据,缓存到本地数据库(用于数据归档和错误转发),通过判断数据中的业务信息分发到不同的业务功能去处理。

示例性的,如图2a所示,为本发明实施例中主要代码的一个逻辑示意图。如图2b所示,为本发明实施例中主要代码的另一个逻辑示意图。

在图2a中,以@jmslistener(destination=“mctopamq”)注解的方式注入当前方法做为消息队列的消费者,在拿到消息队列分发的数据以后,解析、存入请求日志表,根据不同的业务类型(图2a中code字段)和主键(图2a中ywid),获取到需要同步的数据信息,然后根据业务主键和业务类型,跳转到不同的业务处理方法去处理,并将同步数据送至目标系统。

可以理解的是,后将处理结果(state状态,tbcs填报次数,state_desc状态描述)更新到调用服务日志表中。

105、当前服务器以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理。

根据一些业务要求将数据处理完之后,最后以json的形式转发到目标系统,由目标根据相应的规则去接收处理数据进行存储。

可选的,在本发明的一些实施例中,所述当前服务器接收第三方服务器发送的同步数据;所述当前服务器采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;所述当前服务器对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,所述当前服务器将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;当本次同步异常或者同步出错时,根据所述日志记录,所述当前服务器对所述发生更新的数据进行再次同步处理。

示例性的,本发明也可以接收由第三方系统传输过来的数据,考虑到数据量大时处理效率低下的问题,采用多线程技术进行接口处理传输过来的数据进行解析处理,最后存储到相应的数据库中。

在图2b中根据cron表达式定时任务,每天凌晨1点,在调用服务日志表中取出前一天中调用接口失败的数据进行重新处理(将数据重新送至目标系统)。本发明在接收第三方系统同步的数据时,先可以走一遍整个数据处理的程序代码逻辑,验证同步过来的数据合法性,验证通过后存到临时表中,同时保存处理日志,最后利用多线程+定时器的方式进行快速处理存储数据。

如图2c所示,为本发明实施例中主要代码的另一个逻辑示意图;如图2d所示,为本发明实施例中主要代码的另一个逻辑示意图;

如图3a所示,为本发明实施例中业务处理的一个代码逻辑示意图;如图3b所示,为本发明实施例中业务处理的另一个代码逻辑示意图;如图3c所示,为本发明实施例中业务处理的另一个代码逻辑示意图;如图3d所示,为本发明实施例中业务处理的另一个代码逻辑示意图;

如图3e所示,为本发明实施例中业务处理的另一个代码逻辑示意图;如图3f所示,为本发明实施例中异常日志记录的一个代码逻辑示意图;如图3g所示,为本发明实施例中异常日志记录的另一个代码逻辑示意图;如图3h所示,为本发明实施例中定时任务调用异常请求重发的一个代码逻辑示意图。

本发明的有益效果是,当前系统需要给目标系统同步数据时,先把需要同步的数据推送给消息队列,这样提高了程序的稳定性,避免高并发时直接请求目标系统接口时服务器压力过大等问题,且方便做集群部署(在不同服务器上启动包含本发明的服务,只需要都监听同一个消息队列即可)。而本发明在作为队列消费者的服务中会存储当前同步请求的数据到数据库中(这里使用的是oracle12c数据库),再经过数据处理,同步给目标服务器。另外,当接收到第三方系统传输过来的数据时以多线程+定时器的方式进行接收快速处理。本发明对同步请求也进行日志记录,对于同步异常或者同步出错的数据,通过定时任务,重新推送,解决目标服务器请求响应不稳定、目标服务异常等问题。

该发明在当前系统调用队列时,降低系统的耦合,方便通过分布式或者集群调用队列。而在消费者处理队列请求时,也可以进行分布式或者集群处理,同时在接收第三方系统的数据时采用多线程技术快速处理,防止了数据积压问题的出现。除此之外,本发明的日志记录可以保证数据同步的准确性,对响应异常的请求进行定时重传处理,从而提高同步请求的成功率,更稳定、高效地同步数据。

如图4所示,为本发明实施例中服务器的一个实施例示意图,可以包括:

接收模块401,用于当前服务器的数据发生更新后,获取同步请求;

处理模块402,用于根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据;

发送模块403,用于以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理。

可选的,在本发明的一些实施例中,

处理模块402,具体用于将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

可选的,在本发明的一些实施例中,

接收模块401,还用于接收第三方服务器发送的同步数据;

处理模块402,还用于采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,

处理模块402,还用于将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;当本次同步异常或者同步出错时,根据所述日志记录,对所述发生更新的数据进行再次同步处理。

本发明第三方面提供了一种服务器,可以包括:

收发器501,处理器502,存储器503,其中,收发器501,处理器502和存储器503通过总线连接;

存储器503,用于存储操作指令;

收发器501,用于当前服务器的数据发生更新后,获取同步请求;以json的形式将所述处理后的数据向目标服务器发送,所述处理后的数据用于所述目标服务器进行处理;

处理器502,用于调用所述操作指令,根据所述同步请求将发生更新的数据向消息队列发送,其中,所述发生更新的数据包括发生修改的数据或者发生添加的数据或者发生删除的数据;将所述消息队列接收的所述发生更新的数据缓存到本地数据库中,其中,所述本地数据库为所述当前服务器的本地数据库或者预置的第三方数据库,所述发生更新的数据包括至少一种业务信息;对所述发生更新的数据,通过判断所述发生更新的数据中包括的至少一种业务信息分发到对应不同的业务功能去处理,得到处理后的数据。

可选的,在本发明的一些实施例中,

处理器502,具体用于将修改的数据或者发生添加的数据或者发生删除的数据,以map形式向消息队列发送。

可选的,在本发明的一些实施例中,

收发器501,还用于接收第三方服务器发送的同步数据;

处理器502,还用于采用多线程技术对所述同步数据进行解析处理,得到解析处理后的数据;对所述解析处理后的数据进行保存。

可选的,在本发明的一些实施例中,

处理器502,还用于将所述同步请求进行日志记录,所述日志记录包括本次同步的相关信息;当本次同步异常或者同步出错时,根据所述日志记录,对所述发生更新的数据进行再次同步处理。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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