专利名称::用于管理报文排序的方法和系统的制作方法
技术领域:
:本发明涉及一种用于管理报文排序的方法和系统,具体地但不限于,涉及到达多处理器环境中的外部系统的报文的排序。
背景技术:
:报文通信系统存在于多个不同领域,并且以多种不同的方式应用。报文通常与已经发出的或者还未到达的其他报文相关,换言之,通常具有报文排序。鉴于如今众多报文通信系统的工作方式,在中央处理环境下无序地接收到报文的情况并不少见。特别地,存在多处理器环境的情况,该多个处理器以不同的速度运行,从而导致了失序。然后,这些报文通常需要向前传输到目的站。而一些目的站无法处理无序接收到的报文,从而,这些目的站也就无法顺序处理这些报文。有许多现有的通信系统都试图克服上述问题。例如,WO2007/062510描述了一种使用序列发生器(sequencer)来同时处理报文的系统。报文具有唯一标识符和序列指示符。在该系统中,上述条件使得确定该报文或每个报文的先验序列标识符成为可能。这样有助于利用依附性共用相同序列标识符的报文通过相同的处理来分配。在WO2007/062510中,通过将报文锁定在出站队列的方式来处理排序。US2007/0124398公开了一种多处理器环境,其中,系统使用序列标识符和序列号的组合来确保报文通过相同的资源来处理。这种方法需要待发报文的线程,待发报文的线程需要在处理待发报文之前进行确认。还可以选择根据序列号形成的队列,并可以对该队列进行排序。US2003/110230公开了一种并行处理环境,其中,采用通过共用资源(resource)或者共用线程处理来自相同数据源(source)的报文来保存报文的排序。同样,这需要使用待发线程和处理或者经过排序的报文队列来向前发送。上述现有技术的方法在一定程度上起作用,但是这些方法都完全依赖于导致复杂性的将报文排队的步骤,并且还需要使用大量存储器和处理能力。这种系统的主要问题在于维护和并不总是能够使排序基于唯一的序列相关性的事实。这种依赖性可能会比只在同一序列标识符内的序列号的排序要复杂得多。上述方法起到一定作用,但是遇到了维护和可靠性的问题。在存储器中具有等待线程并不稳定因此,如果机器发生问题,则排序会丢失。在经过排序的队列中处理排序产生了可扩展性(scalability)的问题。难以加入更多队列,或者处理和队列之间不得不具有依附性。管理依附性也更复杂。因为在服务方面不存在冗余,所以加入了一个失败的因素。另外,现有技术无法从集中的历史记录中产生教导,从而不可能处理复杂的排序。换言之,当没有唯一的序列标识符时,不可能处理复杂的排序。
发明内容发明目的本发明的一个方面是为了至少克服一些与现有技术相关的问题。本发明提供了根据所附的权利要求所述的方法和系统。根据本发明的一个方面,提供了一种方法,将在等效于多个报文的报文排序的序列中的接收自发送端并且发送至接收端的多个报文进行排序,其中,实时确定报文排序,该方法包括以下步骤从报文流中接收一个或者多个报文,并且将该一个或者多个报文存储在数据库中;识别每个报文的特征(P-Key-Order),其中,该特征对于报文组是共同的;根据该报文的参数,识别对应于该报文组的该报文排序(1、2、3、4等等)的序列;检查该数据库中特定的存储的报文,从而通过以下步骤确定该存储的报文是否可以进行发送确定在该序列中是否有之前的报文存在于所存储的报文之前,并确定该之前的报文的状态;基于该之前的报文的状态,更新该存储的报文的状态;以及在确认该之前的报文被发送之后,即根据序列发送该存储的报文。本发明提供了一种可高度扩展系统,该系统可以轻松地进行扩展,以处理与日俱增的通信量。本发明还保证了报文能够在多处理器环境中以正确的排序进行发送。这些都需要严格的报文的依赖性。系统中并未引入依赖性。并非要将全部报文进行排序无依赖性的报文可以并行发送。因此,如果一个接收端连接发生故障,则这将不会影响到任何其他接收端,除非将报文被功能性连接。另外,由于不同的处理器之间的非同步性会造成许多问题,因此,使用正确的排序非常重要。例如,在航空公司环境下,如果存在着涉及报文同步性的问题,则当实际上班机上仍有可载舱容的情况下,乘客可能会被误拒载。这会造成航空公司的资金损失和其他损失。由于线程和依附性(affinity)没有形成流程的一部分,所以通过简单的实施例提供根据本发明所提供的方法。特别地,由于不存在系统的排队和处理元素,因此,在系统中的排队和处理元素之间不存在依附性。另外,本发明还具有处理错误的灵活方式。当处理序列中的丢失报文时,这一点尤其重要。通过使用数据库,将报文和传送的整个历史记录保留在特定时间窗口中。该时间窗口还提供了阈值。在该阈值之前,报文可以处于一种状态,而在该阈值之后,该报文的状态可能发生改变。该阈值尤其用于保留问题并且用于减小需要用于存储报文及与其相关的信息的空间大小。另外,本发明将排队最小化,并且使得可扩展性更加容易。根据本发明的第二方面,提供了一种报文系统,该报文系统用于对等效于多个报文的报文排序的序列中的接收自发送端并且发送至接收端的所接收到的多个报文进行排序,该方法包括以下步骤接收器模块,用于从报文流中接收一个或者多个报文,并且将该一个或者多个报文存储在数据库中;报文管理模块,用于识别每个报文的特征(P-Key-Order),其中,该特征对于报文组是共同的;用于根据该报文的参数,识别对应于该报文组的该报文排序(1、2、3、4等等)的序列;并且用于检查数据库中特定的存储的报文,从而通过以下步骤确定该存储的报文是否可以发送确定在该序列中是否有之前的报文存在于所存储的报文之前,并且确定该之前的报文的状态;以及基于该之前的报文的状态,更新该存储的报文的状态;传送模块,用于在已发送该之前的报文之后,即根据该序列发送该存储的报文。现在将以实例的方式来参考附图,其中图1是以实例方式给出的根据本发明的实施例的系统的简单示意图,图2是以实例方式给出的根据本发明的实施例的报文(message)的正常情况排序的示意图,图3是以实例方式给出的根据本发明的实施例的图1中的系统的详细示意图,图4是以实例方式给出的根据本发明的实施例所使用的标识命名法的图表的一部分,图5是以实例方式给出的根据本发明的实施例的示出报文生成的流程图,图6是以实例方式给出的根据本发明的实施例的示出计算报文排序的流程图,图7是以实例方式给出的根据本发明的实施例的示出报文的“V状态”的流程图,图8是以实例方式给出的根据本发明的实施例的示出回调的级联和排序的流程图,图9是以实例方式给出的根据本发明的实施例的报文依赖性表,图10是以实例方式给出的根据本发明的实施例的乘客姓名记录信封的实例,图11是以实例方式给出的根据本发明的实施例的示出需要首先将情况环境分开的排序的流程图,以及图12是以实例方式给出的根据本发明的实施例的单个目标的依赖性树。具体实施例方式从最高层面上讲,本发明涉及从一个系统到另一个系统的报文的排序,以便保证同步。该内容在图1中以实例的方式示出。图1示出了与报文管理模块102相连接的预约系统(系统A)100。在将经过同步的报文发送到航线系统(系统B)之前,如在下文中进行更详细描述的,报文管理模块管理收到的报文(incomingmessage)0预约系统100可以是任何适当类型,并且例如,该预约系统包括全球分销系统(GDS)和任何其他适当类型的其他中央资源。可以通过诸如浏览器的在线网络程序、旅行社(travelagent)或者任何其他适当主体来操作该预约系统。航线系统104可以与一条或者多条航线相联系。报文管理模块102包括多个不同步骤,比如过滤、排序、格式化等等。在任何类型的报文系统中,可能要求报文满足特定排序需要。尤其是,在客户从适合的客户航空公司购买飞机票的环境中存在这种情况。在购买飞机票的实例的情况下,报文称为乘客姓名记录(PNR)。乘客姓名记录包括乘客的特定航程的所有细节,该细节包括乘客需要的额外和任何附加服务,以及航程可能发生的任何改变或修改。图2示出了报文排序的重要性的实例。图2示出了报文管理模块102和收到的报文流200。报文流包括关于两项不同记录的报文。关于第一项记录的报文由实线表示,关于第二项记录的报文由虚线表示。对于每项记录,具有由数字0、1、2、3和4来表示的特定报文序列。该序列可以基于创建报文的顺序,但是该顺序可以是绝对的(0,1,2,3,4),或者可以是相对的((0,),(1,0),(2,1),(4,2),......)。如果报文202将航班加入到特定记录中,并且报文204从同一记录中取消了同一航班,则航空公司客户206需要在报文204之前接收报文202,从而使顺序或者内容变得有意义。如果航空公司客户在报文202之前看到报文204,则航空公司将根据报文序列尝试取消尚未预定的航班。报文管理模块102保证了,无论报文到达报文管理模块的顺序是什么,报文202都在报文204之前由客户航空公司206接收到。换言之,“在运行中”计算出报文排序,而没有引用将要到来的排序(incomingorder)。现在,将在下文中更详细地进行描述。参考图3,示出了报文管理模块的更详细的示意图。报文管理模块接收输入Pi300,该输入Pi300通过输入流模块302生成进入到一个或者更多输入流中。尽管报文通过可靠系统生成,并且现在假设没有丢失报文,但是由于并行处理(parallelprocessing)或者其他问题,形成Pi的报文可能具有未确定的顺序。然后,通过报文生成模块304使用输入流来生成包含在该输入流中的报文。然后,将报文存储在存储模块306中。报文生成器模块还与定时器308相连接,并且与输出流模块310相连接。定时器的用途是,在其他事件均未提前对给定报文进行再处理时,确保在给定时间段之后,对给定报文进行再处理。输出流模块310与报文发送模块312相连接,该报文发送模块312将输出314输出到外部系统316。报文发送模块还能够从外部系统316接收确认318,以表示已经接收到该输出(通常是特别报文)。如箭头320所示,该确认传回至存储模块。该确认用于确定接下来应该发送什么报文(如果需要发送的话)。框中的数字1至7对应于图5和图8中的步骤;将在下文中更详细地描述这些步骤。为了更完整地理解将在下文中进行描述的处理步骤,重要的是理解与报文相关的多个关键点报文本身的性质和类型、报文的命名法及其与其他报文的关系。本发明涉及对于一个或者多个报文具有依赖性(cbpendency)的报文。报文相互之间具有依赖性也就是说形成了一系列(afamilyof)报文的一部分。在绝大多数情况下,报文将以基本正确的排序到达报文管理模块102。然而,在多种处理环境中,无序地接收到报文的情况并不罕见。这是本发明所解决的问题之一。当准备好要发送报文时,将尽可能快地发送该报文,而不依赖于其他任何报文。如下文所述,假设已释放所讨论的报文。当无法立刻发送报文时,通常存在一定原因造成了这种情况。一个可能的原因是,还没有接收到所讨论的报文之前的报文。另一种原因是,之前的报文已经发送出去,并且还没有接收到确认。还可能存在报文排序还未完全确定的情况;在这种情况下,报文可能不得不等待直到确定了正确的排序。在报文无法立刻发送出去的任何情况下,都可能存在附加规则(例如使用了定时器),其确定了所讨论的报文的时序安排。例如,如果没有接收到之前的报文,并且存在“序列号空缺(holeinsequencenumber)”,则可能存在附加规则。报文应用了特定类型的命名法。该命名法与数据库中的各种引用和依赖性结合在一起使用,从而确定了报文管理模块中的报文的排序或者序列。参考图4,现在描述了报文命名法的某些方面。图4中的表示出了数据库中的线号(linenumber)、报文引用(reference)和任何依赖性。数据库示出了两个报文M9(j)和M10(j)。如果报文MlO(j)依赖于M9(j),则当接收到报文M9(j)的接收确认时,该流程查找数据库以寻找到所有依赖于M9(j)的存储的依赖性线,从而确定是否存在任何依赖性信息。通过这种方式确定出线MlO(j)。在实例中,线N+1依赖于线N,因此,一旦确认了M9(j),就可以立刻发送线N+1(对应于MlO(j))。另外的命名法涉及报文的来源和目的站。在这个方面,“i”是原始序列标签或者指数,“j”是报文目标。报文生成器发送用Pi标记的报文,其中,i表示报文的排序。当在系统中接收到报文时,目标j为未知。本发明涉及的系统接收报文Pi,并且生成报文Mi(j),其中,i是报文的排序(与Pi相同),j是应该接收报文Mi(j)的终端用户,该终端用户还被称为目标或者客户。在假设没有丢失报文的环境下,Pi使得报文Mi(1)、Mi(2).......Mi(η)生成。Pi引起了通过密钥(key)P-Key-Order(P-密钥-排序参数)确定的一系列报文,其需要遵循由i和由目标或者客户j所限定的排序。可以发送报文的方式将在下文中进行描述。接收到了一系列报文P0、PUP2,并且假设有两个目标j=0和1。可以通过以下排序之一来发送报文:M0(0)、MO(1)、Ml(0)、Ml(1)、M2(0)、M2(1);或者MO(0)、Ml(0)、MO(1)、M2(0)、Ml(I),M2(I)0在任一种情况下,报文排序均被认为是每个目标都以正确排序接收到了报文。根据报文、目标的数量等等,也可以接受许多其他排序。例如,以下报文序列对于目标1是不正确的,对于目标0和目标2是正确的=Ml(1)、MO(0)、Ml(0)、MO(1)、M2(0)、M2(1)。该用于对报文进行排序的方法将在下文中进行更详细的描述。本发明涉及用于处理报文的方法和系统,以确保这些报文能够以正确排序到达目标。这将通过基于软件实现的排序处理和数据库来完成。如上所述,数据库的形式为持续表(persistenttable),该持续表包含了用于进行如上所述的排序处理的历史数据。该历史数据可以包括以下内容标识号(例如,线号);密钥P-Key-0rder,例如,AAAAAA;BBBBBB;等等;数字序列标签(i);目标(j);依赖性标识符DEP-id,该依赖性标识符DEP-id能够进行对应于另一条线的标识号的交叉访问。状态字段(例如,如果没有报文到该目标,则Mi(j)可以是发送(S)、或者空(V),或者,(D)为对另一报文的依赖性、N为没有依赖性(=准备好进行发送),U为未知,即当依赖性未被识别时,对应报文丢失);生成的报文Mi(j);其他数据例如,如果需要,针对错误处理等等的警告报文。上述实例是基于没有报文丢失的理想状态。在这种状态下,只要有必要等待依赖性报文,报文就可能延迟。如果报文没有依赖性,则将状态N分配给该报文。这意味着,报文没有依赖性,并且可以为了传送到外部系统而立刻进行排队。一旦报文处于状态N,并且为了发送到目标而进行了排队,就可以将报文的状态设置为S。状态S意味着报文已经成功发送,并且可以立刻释放(release)所有依赖于该报文的报文。这意味着后续报文将把状态从D改变为N(在相关排序中),并且为了以级联方式向外输出(outbound)传送到目标而进行排队(queue)。实际上,一些报文可能会丢失,特别是在复杂系统中和/或连接问题事件中、或系统崩溃事件中等等。在这些情况下,上述方法可以适合于包括任何“尽了最大努力的(bestefforts)”机构。尽了最大努力的机构的实例使用了图1中的定时器308。定时器或者任何等效的提醒技术的使用都是本发明的重要部分。这是由于以下事实在多处理器结构中,某些报文可能会丢失或者延迟,从而可能会打乱将要传送到客户的报文的序列。为了将无法立刻发送的报文进行再处理,首先必须在时间周期的时间段内存储这些报文。这样能够在报文发生器模块304处接收到新的报文,从而可影响所有延迟报文。在通过定时器308之后,报文返回至报文发生器模块,从而根据排序流程(将在下文进行描述)进行再处理。如果当延迟报文在定时器内时就已经接收到了报文,则可以赋予延迟报文不同的状态,从而可以实施不同操作。例如,如果接收到了延迟报文所依赖的报文,则状态会改变。可能进入定时器的报文是新的报文,该新的报文不具有确定的依赖性。定时器中的所有报文都将对状态更新(例如,更新到D或者N)进行检查。如果没有上述的状态改变,则报文将保持在定时器中。延迟的长度可以根据特定流程和/或在某个时间延迟结束以后所接收到的报文数量来进行调节。还可以将延迟的长度连接到数据库的持续表中的活动窗口(activewindow)。在下文中参考图10对该活动窗口进行更详细地描述。在某个时间点上,无论延迟报文的状态如何,都可以将该延迟报文发送出去。可选地,可以作出删除报文的决定,或者实施另一操作,比如向热线发送警告等等。准确的结果将依赖于系统设置和预定的业务逻辑。参考图5,这里,考虑到报文可能会丢失的事实,将描述生成报文的流程。框中的数字对应于图3中的箭头。首先,在步骤500中,接收到输入Pi,然后,通过处理或者称为后台程序(daemon)的方式将该输入Pi排队。根据本发明,这些后台程序通常称为报文生成器模块。然后,在步骤502中,这些报文生成器模块将生成向前(onward)传送到目标的报文Mi(j)。在步骤504中,从数据库取回并锁定关于P-Key-Order和目标(j)的数据。所有包含P-Key的线都被锁定在数据库中,直到进行传送。这使得数据库能够被连贯读取,并且防止对进行排序的数据同时更新。在步骤506中,实施排序分析,从而计算出报文的排序。该步骤将参考图6进行更详细地描述。在步骤508中,数据库将对应于之前在步骤504中取回的数据的这些行进行更新,并且解除锁定。这样,这些行的这种更新确定了报文的依赖性,并且确保了将行更新为正确的排序值。在步骤510中,确定报文是否准备好进行发送。如果结果为是(已经准备好),则在步骤512中将报文的状态设置为N。这意味着报文不具有依赖性,并且可以为了传送到外部系统而在步骤514中立刻进行排队。如果步骤510的结果为否(尚未准备好),则在步骤516中确定报文的依赖性。每当一个报文是序列中的第一个(实际的第一个报文或者第一个从“活动窗口”外接收到的报文);或者之前的报文都已经成功发送时,该报文都准备好进行发送。为了减小所需要的空间大小,数据库历史保持为特定时间窗口。可以通过具有相互“改变”位置的两个报文之间的最大距离限定出特定时间值。例如报文1在tl到达,报文2在t0到达,其中,t0<tl。特定时间将在“合理情况”下是理论上的最大值(tl-t0)。合理情况取决于系统。在正常情况下,报文2应该等待报文1到达。然而,在到达特定时间之后,可以认为报文2解除了对报文1的依赖性。如果确定了依赖性,则通过相关依赖性标识符将状态更新到D。这在步骤518中示出。状态D表示在当前报文和另一报文之间没有依赖性。因此,为了发送当前报文,必须先从当前报文所依赖的报文中接收确认。如果在步骤516中,没有识别到依赖性(即,没有接收到之前的报文),则在步骤520中将状态设置为U。状态U代表了未知。在该状态中,无法在尚未计算出依赖性的情况下发送报文。如果报文状态是U,则在步骤522中,该报文插入定时器。该定时器将报文延迟,从而为将要接收到的其他输入留出了时间,这样,可以使得该报文的依赖性能够在如上所述的后续分析中得到确定。参考图6,在这里将描述与计算报文序列相关的步骤。在步骤600中,从持续数据库表取回关于目标j和P-Key-Order的相关行,并且将该相关行锁定。在步骤602中,确定是否生成了空状态报文。如果生成了(是,604),则在步骤606中将报文的状态设置为空。如果没有生成空报文(608),则在步骤610中确定是否存在之前的报文。如果没有之前的报文(否,612),则将报文的状态设置为未知(状态“U”)。在这点上,(步骤616)将报文插入定时器,以等待之前的报文到达。如果在步骤610中判断出存在之前的报文(是,618),则在步骤620中确定是否发送了之前的报文。如果之前的报文没有被发送(否,622),则将所讨论的报文的状态设置为依赖(D),如步骤624中所示,当之前的报文确认为已发送时进行排队。如果之前的报文已经被发送(是,6),则在步骤628中将报文的状态设置为不依赖(N),并且为了向前传送而进行排队。参考图7,现在,将描述特殊排序的V或者空。空报文是可以不需要发送、但实际上在数据库中需要使用的报文,用于防止报文的序列号中产生空缺。如步骤700中所示,假设报文(例如,Mi(j))处于空状态,并且接收了Pi+1,在步骤702中,确定Mi+l(j)是否是空。如果是空(是,704),则如步骤706所示,将报文Mi+l(j)的状态设置为空。如果不是空(否,708),则方法进行到步骤710。在步骤710中,确定报文Mi-I(j)是否已经发送。如果已经发送(是,712),则如步骤714所示,将报文Mi+l(j)的状态设置为N。然后,在步骤716中,为了发送而将报文Mi+l(j)排队。如果在步骤710中确定为否(718),则将报文Mi+l(j)的状态设置为D,并且该报文具有基于Mi-I(j)的依赖性。可以对收到的报文或者已在定时器中进行延迟的报文执行上述各个步骤。一旦为了传送而将报文进行了排队,就会接收到确认、进行涉及级联的处理的第二部分以及进行排序回调(call-back)。这在图8中示出,并且,框中的数字仍对应于图3中的箭头。在步骤800中,将报文Mi(j)发送给用户,并且接收到确认。在步骤802中,确定报文Mi(j)是否具有任何依赖性。如果具有(是,804),则在步骤806中,假设Mi+n(j)依赖于报文Mi(j)。然后,将报文Mi+n(j)的依赖性更新为状态N,并且将报文Mi(j)的状态更新为状态S。在步骤808中,为了传送给用户,将报文Mi+n(j)排队。然后,在步骤810中,将报文Mi(j)的状态设置为S。应该注意,一旦为了发送而将报文进行排队,就不需要进一步检查报文的状态,直到进行了适当的确认或者其他操作。在报文发送之后,该流程并不总是需要得到确认才能继续。(发送报文和等待结果的)流程可以是同步的或者异步的。本发明以单个报文管理模块和数据库的方式进行了示出,然而,本发明还可以通过多个报文管理模块和数据库来实现;但是这可能使系统的更加复杂。图9示出了依赖性表的一部分的实例,其中,该依赖性表又形成了数据库中的持续表的部分。该表在列900中示出了在数字上增长的标识符;在列902示出了P-Key-Order;在列904中示出了报文的排序标签(i);在列906中示出了目标或者用户标签(j);在列908中示出了报文状态;在列910中示出了报文依赖性,并且在列912中示出了报文本身。对于特定目标,例如,j为1,报文9、11、13、15和16相关。然而,报文16是基于P-Key-Order的不同系列(family)的一部分,从而与其他报文9、11、13和15没有联系(linkage)。现在参考来自公共系列(AAAAAA)的报文,ID为9的报文是该系列中的第一个报文,因为其指数i为0。如状态S所示,该报文已发送。ID为11的报文是该系列中接下来的报文,但是该报文为空(状态V),因此,没有要发送的报文。当ID为9的报文已发送时,ID为13的报文的状态为没有依赖性(N)。因此,准备发送该报文(ID13)。由于ID为15的报文依赖于ID为13的报文,因此,该ID为15的报文的状态为D。一旦ID为13的报文已发送,就将报文15排队并且发送。包含了报文及其相关信息的数据库为持续表的形式。该表格具有任何特定时刻的活动窗口。该活动窗口是当前存储的和活动的表的一部分。例如,参考图9,活动窗口可以是从ID9到ID16。该表中在此之上的任何报文(即,ID0到ID8)均不再需要存储,并且如果需要的话可以将这些报文删除。根据需要来使用和处理所有重要的信息。在该表中,报文的两个系列都在活动窗口中开始。但并不限于此。例如,活动窗口可以移动,使得该活动窗口开始于ID11,在这种情况下,可以删除ID9和ID10。依赖于ID9和IDlO的报文在活动窗口中不会再遇到ID9和ID10,因此,假设如果不在活动窗口中,则其他报文所依赖的所有报文已经被发送出去。可以了解,随着报文进入和离开,活动窗口将继续改变。活动窗口的尺寸是预先确定的,使得任何失序报文都可以到达,并且确认了这些失序报文的依赖性,使得任何未发送的报文都保留在活动窗口中,直到可以将这些失序报文合理发送。该尺寸可以是对于等待给定后续报文的最大时间的假设的静态值。实例为m个小时之后,报文Mi仍等待报文Mi-Ι,这样的话,对于报文Mi-I来说可能太晚了。所以报文Mi将作为“序列中的第一个”进行处理。在这里,活动窗口是η个小时。不需要保留长于η小时的历史记录。有可能确定收到的报文是否不得不基于收到的报文Pi(j)的日期/时间而等待之前的报文。该日期/时间对应于报文Pi-l(j)的形成日期/时间。活动窗口的尺寸可以根据例如报文的数量、系统需求、或者其他需求而通过任何适当方式变化。在某些情况下,报文可以包括与不止一个实体相关的信息。例如,关于乘客姓名记录(PNR),可能有两位旅客最初都登记了特定航班。如果一位乘客决定改签其航班,则原始报文会分成两个单独的报文,然后,虽然两个单独的报文是相联系的,但是这两个单独的报文可能随后产生两个不同系列的报文。图10示出了这种情况的实例。原始乘客姓名记录标记为1000。在某个时间点上,第二位旅客JeanDupond1002决定乘坐不同的航班。在该时间点上,报文被分为两个独立的系列1004和1006,每个系列都具有不同的P-Key-Order,即,分别为AAAAAA和BBBBBB。原始乘客姓名记录通常称为之前的父报文(previousparent),同时,2个新生成的报文称为之后的父报文(subsequentparent)和之后的子报文(subsequentchild)。图11示出了所谓分开情况下的排序需要、记录细节和记录依赖性,其中,之前的父报文被分成父报文和子报文。在左手侧1100上,报文AO被分成报文Al和BO。Al和BO在其系列中都具有之后的报文,每个系列的之后的报文分别示出为A2和Bi。图11的右手侧1102示出了不同报文的依赖性。Bl依赖于BO,该BO转而依赖于AO,同时,A2依赖于Al并且该Al依赖于BO。上述实例基于简单的报文依赖性。然而,通常不同报文系列之间的依赖性会导致依赖性的复杂关系,并且转而导致那些报文所需要的序列的复杂关系。图12是具有不同报文系列的单个目标的依赖性树。该附图示出了具有不同密钥(换言之,来自不同系列)的不同报文序列。不同的密钥标记为Μ、Μ’、M”和M”’,并且通过相关数字限定出每个系列中的报文的特定排序。为了简化图表,去除了目标符号或者用户符号。如所示,M’、M”和M”’包含了对其父报文的引用(报文M),因此,存在依赖性,并且不同的报文系列意识到这种依赖性。在附图中,箭头表示一个报文依赖于另一报文。例如,M’2依赖于M”0。本发明的一个特征是将数据库中的收到的报文的历史记录存储预定时间段。该预定时间段取决于对混乱的报文进行重新排序所需要的最大时间间隔。如果将报文确定为与任何其他报文无关,则该预定时间段可以忽略不计。本发明结合旅行环境中的机票购买进行了描述。然而,可以了解,本发明可以应用于其他环境,例如,诸如银行业务的任何多处理报文发送环境。可以了解,本发明可以通过许多不同方式进行改变,而这些改变仍然在本发明预期的范围和主旨的范围内。权利要求1.一种方法,基于一个报文对一个或者多个其他报文的依赖性,对一序列中的接收自发送端并且发送至接收端的多个报文进行排序,所述方法包括以下步骤从报文流中接收一个或者多个报文,并且将所述一个或者多个报文存储在数据库中;识别每个报文的特征(P-密钥-排序参数),其中,所述特征对于报文组是共有的;根据所述报文的参数,识别对于所述报文组中报文的报文依赖性;检查所述数据库中特定的所存储的报文,从而通过以下步骤确定所存储的报文是否可以进行发送确定所存储的报文是否依赖于一个之前的报文,并且确定所述之前的报文的状态;基于所述之前的报文的状态,更新所存储的报文的状态;在确认所述之前的报文被发送之后,发送所存储的报文。2.根据权利要求1所述的方法,进一步包括延迟所存储的报文,直到满足预定条件。3.根据权利要求1所述的方法,进一步包括延迟所存储的报文,直到到达延迟时间。4.根据上述任一项权利要求所述的方法,其中,确定是否存在之前的报文的步骤包括接收所述之前的报文已经由接收端接收的报文确认。5.根据权利要求4所述的方法,进一步包括将所存储的报文发送到输出队列。6.根据权利要求4或5所述的方法,进一步包括更新所存储的报文的状态,从而更新与所存储的报文相关的所有之后报文的状态。7.根据上述任一项权利要求所述的方法,进一步包括顺序地对所述报文组中的每个报文重复检查的步骤、更新的步骤和发送的步骤。8.根据上述任一项权利要求所述的方法,进一步包括以状态的任何变化来更新所述数据库。9.一种报文系统,用于对一序列中接收自发送端并且发送至接收端的多个报文进行排序,所述多个报文不带有序列标识符,所述序列等效于所述多个报文的报文排序,所述方法包括以下步骤接收器模块,用于从报文流中接收一个或者多个报文,并且将所述一个或者多个报文存储在数据库中;报文管理模块,用于识别每个报文的特征(P-密钥-排序参数),其中,所述特征对于报文组是共有的;用于根据所述报文的参数,识别对应于所述报文组的所述报文排序(1、2、3、4等等)的序列;并且用于检查所述数据库中特定的所存储的报文,从而通过以下步骤确定所存储的报文是否可以进行发送确定在所述序列中是否有之前的报文存在于所存储的报文之前,并且确定所述之前的报文的状态;以及基于所述之前的报文的状态,更新所存储的报文的状态;传送模块,用于只要已发送所述之前的报文,就根据所述序列发送所存储的报文。10.根据权利要求9所述的系统,进一步包括延迟模块,用于延迟所存储的报文,直到满足预定条件。11.根据权利要求9所述的系统,进一步包括时间延迟模块,用于延迟所存储的报文,直到到达延迟时间。12.—种计算机程序,包括指令,所述指令用于当在可编程设备上执行所述计算机程序时,实施权利要求1至8中任一项所述的方法。全文摘要一种方法,基于一个报文对一个或者多个其他报文的依赖性,对一序列中的接收自发送端并且发送至接收端的多个报文进行排序,该方法包括以下步骤从报文流中接收一个或者多个报文,并且将该一个或者多个报文存储在数据库中;识别每个报文的特征(P-Key-Order),其中,该特征对于报文组是共有的;根据该报文的参数,识别对于该报文组中的报文的报文依赖性;检查该数据库中特定的存储的报文,从而通过以下步骤确定该存储的报文是否能够进行发送确定该存储的报文是否依赖于之前的报文,并且确定该之前的报文的状态;基于该之前的报文的状态,更新该存储的报文的状态;在确认该之前的报文被发送之后,发送该存储的报文。文档编号G06F9/46GK102414663SQ201080019944公开日2012年4月11日申请日期2010年5月4日优先权日2009年5月18日发明者大卫·保罗茵,艾格尼丝·珀尔瑞德,马里恩·卡多瑞特申请人:阿玛得斯两合公司