一种系统间交互方法和装置与流程

文档序号:11406946阅读:249来源:国知局
一种系统间交互方法和装置与流程

本发明涉及信息交互领域,尤其涉及一种系统间交互方法和装置。



背景技术:

随着信息化的快速发展,企业需要管理和维护的系统越来越多,系统之间的信息交互也日益增多。目前普遍采用的信息交互技术是在一个系统中直接调用目标系统开放的webservice接口,该技术要求各系统的运行环境需要一致。

当交互双方系统的运行环境不一致时,甚至在双方系统使用了同一接口协议的情况下但其中一方系统对该协议封装的api进行过修改时,或者其中一方系统所采用的该协议版本较低时,都将导致双方系统无法直接进行信息或数据的交互。例如,在申请人所使用的一个系统中,底层使用gsoap提供的soapapi,在server层中需要用c来实现对目标系统的webservice接口的调用,其中将调用webservice的接口代码编译链接成动态链接库,并注册到系统当中。然而,这时却会出现无法加载动态链接库的情况。通过查看该系统所使用的soapapi的链接库及系统日志分析发现,由于该系统使用了soapapi并对其中部分函数库进行了改造,导致与目标系统中原生的soapapi无法集成到一起。

可见,由于不同的系统各自具体的运行环境各有差异,给系统间的信息交互带来了各种不便。因此,系统之间如何更好的实现复杂信息交互已成为亟待解决的问题。



技术实现要素:

有鉴于此,本发明实施例提供了一种系统间交互方法和装置,旨在解决需要进行信息交互的不同系统因开发语言、接口协议、操作系统、特定业务系统等运行环境不同而无法顺利地进行交互的问题。

本发明实施例的系统间交互方法用于使系统运行环境不同的第一系统和第二系统之间进行交互,并包括:第一处理模块创建第一消息队列,将从第一系统获取的第一数据存储到所述第一消息队列中并发送所述第一消息队列,所述第一消息队列具有唯一标识符;第二处理模块接收所述第一消息队列,从所述第一消息队列中获取所述第一数据,将所述第一数据应用于所述第二系统并将从所述第二系统得到的相应的结果数据存储到所述第一消息队列中;所述第一处理模块从所述第一消息队列中获取所述结果数据并返回给所述第一系统。

本发明的系统间交互装置用于使系统运行环境不同的第一系统和第二系统之间进行交互,包括:第一处理模块,配置为创建第一消息队列,将从第一系统获取的第一数据存储到所述第一消息队列中并发送所述第一消息队列,所述第一消息队列具有唯一标识符;第二处理模块,配置为接收所述第一消息队列,从所述第一消息队列中获取所述第一数据,将所述第一数据应用于所述第二系统并将从所述第二系统得到的相应的结果数据存储到所述第一消息队列中,所述第一处理模块进一步配置为从所述第一消息队列中获取所述结果数据并返回给所述第一系统。

通过本发明实施例的技术方案,不但解决了系统间因运行环境不同而无法顺利进行信息交互的问题,而且降低了系统间的耦合度,并实现了能够在系统中实现功能热部署的效果,从而对减少企业生产管理系统停机时间起到了极大的作用。

附图说明

图1为本发明的系统间交互方法的一个实施例的示意性流程图;

图2为本发明的系统间交互方法的另一个实施例的示意性流程图;

图3为本发明的系统间交互方法的再一个实施例的示意性流程图;

图4为本发明的系统间交互装置的一个实施例的示意性框图;

图5为本发明的系统间交互装置的一个实施方式的示意性框图。

具体实施方式

下面参照附图对本发明的实施例进行详细说明。

图1为本发明的系统间交互方法的一个实施例的示意性流程图。在本发明实施例中,该系统间交互方法用于使系统运行环境不同的第一系统和第二系统之间进行交互,这里的系统运行环境不同例如可以为开发语言、接口协议、操作系统等中的一方面不同或各方面均不相同。本发明实施例对于交互双方的系统的具体类型没有限制。

如图1所示,本发明实施例的系统间交互方法可以包括以下步骤:

s101、第一处理模块创建第一消息队列,将从第一系统获取的第一数据存储到第一消息队列中并发送第一消息队列;

当第一系统需要与第二系统进行信息交互或数据交互时,第一系统可调用第一处理模块或通知第一处理模块开始工作。第一处理模块从第一系统获取需要与第二系统进行交互的第一数据。第一处理模块在创建第一消息队列后,可根据第一系统的数据处理规则创建专用的数据结构,使用该数据结构将第一数据存储在第一消息队列中。第一消息队列中可存放多个消息,第一消息队列可以具有唯一标识符,第一消息队列中的每个消息也可以具有唯一标识符,在不同的处理阶段中,可根据消息队列和消息的标识符对其进行识别、解析、存储和更新等操作。

本发明实施例中使用ipc(进程间通信)消息队列作为第一消息队列的示例,但本发明可用的消息队列不限于此,例如还可以是redis消息队列或者rabbit消息队列等。

s102、第二处理模块接收所述第一消息队列,从所述第一消息队列中获取所述第一数据,将所述第一数据应用于所述第二系统并将从所述第二系统得到的相应的结果数据存储到所述第一消息队列中;

第二处理模块可根据消息队列的标识来接收第一消息队列。第二处理模块可从消息队列中获取由第一处理模块存入的第一数据,将第一数据应用于第二系统,例如调用第二系统的相关进程或接口来处理第一数据,并从第二系统得到相应的结果数据。第二处理模块可根据消息队列的标识,将结果数据存入相应的第一消息队列中。

s103、所述第一处理模块从所述第一消息队列中获取所述结果数据并返回给所述第一系统。

第一处理模块可根据消息队列的标识,识别出第一消息队列并从中获取由第二处理模块存入的结果数据,并将结果数据返回给第一系统。

通过本发明实施例的技术方案,不但解决了系统间因运行环境不同而无法顺利进行信息交互的问题,而且降低了系统间的耦合度,并实现了能够在系统中实现功能热部署的效果,从而对减少企业生产管理系统停机时间起到了极大的作用。同时,由于消息队列可以在系统的底层中实现,这样可以对复杂的待交互数据进行结构化的存储和交互,能够提高信息或数据处理的速度。

图2为本发明的系统间交互方法的另一个实施例的示意性流程图。

如图2所示,步骤s201-s203与图1所示实施例中的步骤s101-s103相同,本发明实施例的系统间交互方法在图1所示实施例的基础上,可以进一步包括如下步骤:

s204、第一处理模块从第一消息队列中获取结果数据后,删除第一消息队列。

在本发明实施例中,第一系统每次出现需要与第二系统交互的数据时,第一处理模块创建一个新的第一消息队列,并在获得第二处理模块存入的结果数据后,将第一消息队列删除。如此可避免交互过程中产生过多的消息队列,避免浪费队列资源,同时能够降低数据处理过程的复杂性。

在本发明一个实施例中,第一系统的待交互的第一数据可以由多个数据单元构成,这些数据单元可能要在例如树形结构数据的不同的数据对象中提取。第一处理模块获得由多个数据单元构成的第一数据后,可将这些数据单元存储在所述第一消息队列中的各个消息中,并为第一消息队列中的每个消息分配唯一标识符。每个消息中可存储一个数据单元或多个数据单元,有的数据单元可能需要分为几个部分存储在不同的消息中。消息的存储和接收可按照消息的标识符来进行,第一处理模块与第二处理模块之间可约定数据单元在消息中的分布方式,例如将各数据单元按序排列后按照标识符的顺序将数据分段写入各个消息中,使得第二处理模块接收所述第一消息队列后,根据所述第一消息队列中每个消息的唯一标识符就能够将从每个消息中提取的全部数据单元按原序排列并重新整合为第一数据。

在本发明另一个实施例中,第一数据可以由多个数据单元构成,并且第一处理模块或第一系统可以对每个数据单元分配唯一编号。第一处理模块获得由多个数据单元构成的第一数据后,可将这些数据单元分别存储在第一消息队列中的各个消息中,每个消息中可存储一个数据单元或多个数据单元。第二处理模块接收第一消息队列后,将第一消息队列中各个消息中的数据单元取出,并按照各个数据单元的唯一编号将所述多个数据单元重新整合为第一数据。

在本发明实施例中,当结果数据的结构较为简单时,可将结果数据通过消息队列中的一个消息来传送。当结果数据的结构也较为复杂时,例如结果数据包括多个数据单元时,也可以采用类似于传输第一数据的方式对结果数据进行传输。例如第二处理模块可将结果数据的多个数据单元按序存入消息队列的多个消息中,第一处理模块通过对消息的标识符的识别来将提取自多个消息的多个数据单元重新整合为结果数据。或者,第二处理模块可对结果数据的每个数据单元分配唯一编号,使得第一处理模块从第一消息队列中的多个消息中获取到多个数据单元后,能够根据每个数据单元的唯一编号将这些数据单元重新整合为结果数据。

通过本发明上述各个实施例,可以在系统间实现对结构较复杂的数据的传输和交互,进一步拓宽系统间的交互范围,提高系统间的信息交互能力。

在本发明实施例中,第一处理模块中可封装能由第一系统调用的接口,在接口中创建消息队列、为第一数据创建专用的数据结构、存储第一数据等。第一系统可通过调用第一处理模块中的接口,触发交互进程,传输待交互的第一数据。当第一处理模块从消息队列中获取到由第二处理模块存入的结果数据后,通过第一系统对第一处理模块中接口的调用,将结果数据返回给第一系统。本发明实施例通过将第一系统能调用的接口封装在第一处理模块中,能够提高信息处理的效率。

在本发明实施例中,第二处理模块可封装能由所述第一处理模块调用的接口,使得第一处理模块能够触发第二处理模块开始工作,第二处理模块与第二系统进行信息交互后将结果数据存储到消息队列并发送。本发明实施例通过将第一处理模块能调用的接口封装在第二处理模块中,能够提高信息处理的效率。

在本发明实施例中,第一消息队列的创建、发送和接收可以在系统内核中进行,第一数据和结果数据通过消息队列进行的传输也在系统内核中进行。通过本发明实施例,能够提高数据传输和处理的效率。

在本发明实施例中,第一处理模块和第二处理模块可以均设置在第一系统中,例如可通过编程语言实现第一处理模块和第二处理模块,第一处理模块运行时可向第一系统申请系统内核空间来存放消息队列,并创建数据结构对第一数据进行存储入消息的操作,并调用第二处理模块中的接口触发第二处理模块工作,第二处理模块可从该内核空间获得消息队列及其中的第一数据,并将结果数据存入该内核空间的消息队列的消息中。此外,第一处理模块和第二处理模块也可以独立于第一系统而设置,并且第一处理模块所在的装置与第一系统连接,第二处理模块所在的装置与第二系统连接,第一处理模块与第二处理模块通过共用的存储空间进行消息队列的发送与接收。本领域技术人员根据本发明的构思,能够根据需要对第一处理模块和第二处理模块的具体设置位置进行布置。

图3为本发明的系统间交互方法的再一个实施例的示意性流程图。

如图3所示,本发明实施例的系统间交互方法包括如下步骤:

s301、第一处理模块创建第一消息队列,将从第一系统获取的第一数据存储到第一消息队列中并发送第一消息队列;

s302、第二处理模块接收所述第一消息队列,从所述第一消息队列中获取所述第一数据,将所述第一数据应用于所述第二系统并将从所述第二系统得到的相应的结果数据存储到所述第一消息队列中,并返回状态值;

s303、第一处理模块检测到状态值后,从第一消息队列中获取结果数据并返回给第一系统。

在本发明实施例中,第二处理模块将结果数据存储到第一消息队列中之后,会返回一个状态值,用于表示第二处理模块的工作正常完成。第一处理模块可基于对状态值的检测来确定第二处理模块已完成了结果数据的存储,从而能够快速地从第一消息队列中获取结果数据并返回给第一系统。

图4为本发明的系统间交互装置的一个实施例的示意性框图。本发明实施例的系统间交互装置用于使系统运行环境

和第二系统20之间进行交互。

如图4所示,本发明实施例的系统间交互装置可以包括第一处理模块30和第二处理模块40。

第一处理模块30可以配置为创建第一消息队列,将从第一系统10获取的第一数据存储到第一消息队列中并发送第一消息队列。第一处理模块30可以配置为对第一消息队列分配唯一标识符,以及为第一消息队列中的消息分别分配唯一标识符。

第二处理模块40可以配置为接收第一消息队列,从第一消息队列中获取第一数据,将第一数据应用于第二系统20并将从所述第二系统20得到的相应的结果数据存储到第一消息队列中。

第一处理模块30可以进一步配置为从第一消息队列中获取结果数据并返回给第一系统10。

当第一系统10需要与第二系统20进行信息交互或数据交互时,第一系统10可调用第一处理模块30或通知第一处理模块30开始工作。第一处理模块30从第一系统10获取需要与第二系统20进行交互的第一数据。第一处理模块30在创建第一消息队列后,可根据第一系统10的数据处理规则创建专用的数据结构,使用该数据结构将第一数据存储在第一消息队列中。

第二处理模块40可根据消息队列的标识来接收第一消息队列。第二处理模块40可从消息队列中获取由第一处理模块30存入的第一数据,将第一数据应用于第二系统20,例如调用第二系统20的相关进程或接口来处理第一数据,并从第二系统20得到相应的结果数据。第二处理模块40可根据消息队列的标识,将结果数据存入相应的第一消息队列中。第一处理模块30可根据消息队列的标识,识别出第一消息队列并从中获取由第二处理模块40存入的结果数据,并将结果数据返回给第一系统10。

在本发明一个实施例中,第一处理模块30可以进一步配置为在从第一消息队列中获取结果数据后删除第一消息队列。如此可避免交互过程中产生过多的消息队列,避免浪费队列资源,同时能够降低数据处理过程的复杂性。

图5为本发明的系统间交互装置的一个实施方式的示意性框图。

如图5所示,本发明该实施方式中,第一系统实施为企业中的产品生命周期管理系统,第二系统实施为gm管理系统。其中,两个系统虽然均采用了soapapi,但产品生命周期管理系统对其中部分函数库进行了改造,导致与gm管理系统中原生的soapapi无法集成到一起,两个系统之间因运行环境不完全相同而无法直接进行信息或数据的交互。

第一处理模块实施为产品生命周期管理系统底层消息处理模块(以下简称为底层消息处理模块),第二处理模块实施为gm管理系统中间件模块(以下简称为中间件模块)。本发明该实施方式中采用了unixipc消息队列作为第一消息队列。

底层消息处理模块封装有可供产品生命周期管理系统调用的接口,在接口中创建ipc消息队列,并根据产品生命周期管理系统具体的数据处理方式创建具体的数据结构来存储需要交互的信息。消息队列中可存放多个消息,为每个消息生成一个唯一标识符,在系统的不同进程中,可根据该标识符对同一个消息进行类型解析、存储、更新、发送及删除等操作。

中间件模块可以维护两个系统间需要交互的信息。底层消息处理模块通过ipc消息队列把待交互的数据或信息发送到中间件模块的存储单元(或发送到其他存储单元),中间件模块通过gm管理系统处理存储单元中的数据,并把处理的结果数据通过信息队列发送给底层消息处理模块。

底层消息处理模块中的接口根据产品生命周期管理系统具体的数据处理方式封装各种对消息队列的处理方式。

本实施方式中,消息队列例如可使用如下数据结构,但本实施方式能够使用的数据结构不限于此:

上述数据结构以下简称为bom信息结构。这里bom(billofmaterial,物料清单)是一种计算机可识别的产品结构数据文件。

bom信息结构存储两个系统之间需要交互的数据。不同的数据交互进程可以通过使用msgget(ipc_private,0666|ipc_creat|ipc_excl)指令来创建消息队列,该消息队列的标识符是唯一的。

在实际应用中,一个完整的bom数据块中不同的数据块需要在不同数据对象中提取。一个完整的bom信息结构具有严格的分层结构,每层中的单个数据块也具有一定的顺序,即一个完整的bom数据块是由多个数据单元按照特定的顺序组织在一起的。可以为每个数据单元分配唯一的查找编号,底层消息处理模块在上述数据结构中可以使用msg_type来存储这个查找编号。

中间件模块在接收消息队列时,可以按照各个数据单元的查找编号把各个数据单元整合在一起。为了减少接口调用的次数,以提高数据传输的效率,作为消息发送端的底层消息处理模块可将一个完整的bom数据块的所有数据单元写入同一个消息队列把需要发送的数据存储到该消息队列。中间件模块可获得底层消息处理模块创建的消息队列的id。

在底层消息处理模块中可通过msgsnd(msgid,(void*)data,512,ipc_nowait)指令发送消息队列,在作为消息接收端的中间件模块,可通过msgrcv(msgid,data,512,msgtype,ipc_nowait)指令接收消息队列,

中间件模块接收到存储有数据的消息队列之后,进行数据的重新整合。

设中间件模块接收到消息队列后,从各个消息中提取出的各个数据单元为qo=(q3,q1,q2,...qn,qn-1),然后通过自定义的排序算法sort(q)得到需要的数据q,即:

q=(q1,q2,q3,...qn-1,qn)=sort(qo)

中间件模块在进行数据单元的重新整合之后,即可将得到的完整数据应用于gm管理系统,并把gm管理系统生成的结果数据回填到消息队列的bom信息结构的returnmsg字段中。底层消息处理模块可从消息队列中获取到该结果数据,对该结果数据进行解析,判断数据传输的正确性。

本发明实施方式的传输过程使用了unixipc系统内核通信方式,传输过程是通过调用系统命令来驱动系统内核生成消息队列并进行数据或消息的传输。在一次完整的信息交互过程中涉及到四个阶段的返回值,可对每个返回值进行解析以判断处理结果的正确性。

四个阶段的返回值具体的解析方式如下:

阶段1:底层消息处理模块调用系统命令创建子进程用于中间件模块执行程序等准备工作,成功则返回值为0,如果失败,返回值为-1;

阶段2:中间件模块调用系统命令并执行子进程中的程序,如果失败或者系统命令未正常执行结束,设其返回值为status,status是个整形数据,则失败原因会写入到status的低8~15比特位中,这时在底层消息处理模块中可使用wifexited(status)指令,并且在wexitstatus(status)为0时,则说明子程序即中间件模块的处理过程正常结束;

阶段3:如果阶段2正常结束,底层消息处理模块读取消息队列中的消息,并取出bom信息结构中的returnmsg中存储的结果数据;

阶段4:底层消息处理模块在获取到结果数据后,可通过调用msgctl(msgid,ipc_rmid,0)指令来删除使用完的消息队列,以免造成系统中产生过多的消息队列,导致系统资源浪费。

图5中底层消息处理模块可随产品生命周期管理系统部署,通过该系统的某些操作触发底层消息处理模块,并由底层消息处理模块调用中间件模块中的接口触发中间件模块工作,中间件模块使用消息队列中的数据与gm管理系统进行交互,将gm、管理系统返回的结果数据存储到消息队列的返回字段中并发送。底层消息处理模块检测到消息队列中有返回的消息,则取出返回的结果数据并返回给产品生命周期管理系统,如此完成了一次系统间的信息交互过程。

以上对本发明的多个实施例进行了说明,但本发明不限于上述具体的实施例或实施方式,本领域技术人员在不脱离本发明构思的前提下,能够对本发明的实施例进行多种变型或修改,这些变型或修改均落入本申请所要求保护的范围内。

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