具体实施方式
本发明提供允许消息通过离散的通信会话和面向会话的信道以由排队相关消息预期的相关方式通信的系统、方法和计算机程序产品。具体地,根据本发明的系统和方法允许消息在离散的通信会话中从一个应用程序发送至另一个应用程序,使得接收计算机系统可以适当地处理不同消息组。
例如,如通过阅读本发明说明书和权利要求书可以理解,本发明的一个方面涉及将排队协议的各方面与通信会话的一般方面结合。本发明的另一方面涉及准备和接收将被发送至特定队列然后由单个处理节点或应用程序以相关的方式处理的相关消息。本发明的又一方面涉及适当地以特殊的顺序或作为组的一部分标识和处理会话中的消息。
例如,图1示出了用于实现本发明的一个或多个实现的概观示意图。具体地,图1示出了发送计算机系统100处的应用程序103创建一条或多条相关消息110、113和115,它们将以诸如顺序地,或者以任何顺序作为组的一部分的相关的方式由特定处理节点处理。例如,用户可能请求要求使用在线银行的某一应用程序的一个事务,然后当该事务完成后,请求在线银行的另一事务,它使用同一应用程序,但必定向用户请求相关数据的不同集。
一般而言,如果发送计算机系统100被配置成这样,那么发送计算机系统100启动离散的通信会话,以及相应的面向会话的信道120。发送计算机系统100不必理解如此处所述的会话通信,只要发送计算机系统100是使用以某种方式关联消息组的机制配置的。例如,不实现通信会话的发送计算机系统可以只要通过指示组中的一条消息是第一消息而该组中的另一条消息是最后消息来关联消息的组。
一般而言,信道仅是通信栈,诸如含有定义网络通信状态的一层或多层的网络栈。另一方面,会话可以被理解为相关消息组的离散的标识符,使得一组相关消息与一通信会话相关联,而不同的相关消息的另一组与不同的通信会话相关联。而面向会话的信道是被用于对消息的离散会话通信的信道。在本发明的某些实现中,发送和接收计算机系统将为任何给定通信会话创建一条面向会话的信道。然而在其它实现中可能在一个会话中拥有多条信道,且具有结合一条面向会话的信道使用的多个通信会话。
在任何情况下,图1示出了以相关方式处理的消息110、113和115中的每一个,将最初通过面向会话的信道120被发送至接收计算机系统150。从而,编写器105可以包括指示每一消息都是相关组的一部分的每一消息110、113、115中的会话信息,使得消息110、113和115中的每一个都具有公共的会话标识符。编写器105可以包括关于消息排序的头部信息,诸如会话是否是排序的会话,或者会话中的消息是否可以以任何顺序被处理。如果会话是排序的会话,那么编写器105可以包括顺序标识符,它指示,例如消息110是组中三条消息中的第一条。
然而,不是所有情况中都需要顺序标识符。例如,如果发送计算机系统100没有被配置成实现会话,但是可以标识消息组是相关的,那么本发明的实现允许接收计算机系统150将消息组与会话相关联,然后在单个处理节点处以任何任意的顺序处理消息组。具体地,接收计算系统150可以处理消息110、113和115,而无论它们是如何接收的,按顺序还是不按顺序,消息是否与排序的还是无序的会话相关联。从而,本发明的实现可以应用于其中排序必须还是不必与相关消息的给定组相关联的实例。
另外,应用程序编写器105可以通过包含指示队列管理器140处的特定面向会话队列的队列地址123信息来准备消息。应用程序编写器105也可以包括由本地队列管理器130维护的信道120的状态信息。具体地,信道的状态信息可以包括,关联消息110、113和115中的每一个作为特定会话的一部分的信息,以及其它。这样,队列管理器130包括发送计算机系统100处的与应用程序103通过接口连接的一个或多个组件或模块,以及面向会话信道的一层或多层。而且,队列管理器130(和/或队列管理器140)能够为信道通信栈中的每一层维护状态信息,和标识消息110、113、115等的分组与通信会话117相关联的状态信息。队列管理器130、140可以被本地化至发送和/或接收计算机系统,也可以是远程的,从而存在于路由选择通路上的中间系统中。
如图1中所示,队列管理器130可以执行任何数量的合适的功能,诸如在将消息的相关组(即,会话)发送至接收队列管理器140之前在队列中存储该消息。队列管理器130也可以包括与消息110、113、115的一个或多个相应的头部,以及对每一消息打包以用于传送。具体地,队列管理器130可以在适当处包括,给定消息头部中的状态值。队列管理器130也可以通过将敏感数据结构插入至其它数据结构内来封装每一消息110、113、115的部分,使得消息可以管道传送至带有地址的队列123。
另外,队列管理器130可以添加头部信息,诸如在简单对象访问协议(“SOAP”)消息情况中的“Via”信息,它有助于确保特定通信会话的消息被适当地转发。诸如此类的SOAP头部信息对于“SOAP-理解”的中间路由器特别有用。如果连接路径中的中间路由器是SOAP-理解的,那么头部信息(例如,“Via”)可以帮助中间路由器确保在特定通信会话中接收和传递的所有消息被转发至合适的节点用于处理。
如果还没有被应用程序编写器105插入,那么队列管理器130也可以在消息110、113、115中插入会话标识符,它为该相关消息的指定组唯一标识了通信会话。因为,为要与另一相关消息组不同地处理的每一相关消息组创建新的、不同的会话,相关消息的每一分组将含有唯一的会话标识符(“ID”)。因此,如图1中所示,消息110包含该消息是会话117的一部分的信息。如果消息113、115被提供带有会话117的标识符,那么接收计算机系统150将容易地识别消息110、113和115中的每一个为相关组的一部分用于处理。
图1示出了发送计算机系统100可以将消息110、113、115直接定址到已定地址的队列123。在一种实现中,中继消息涉及沿着发送和/或接收计算机系统之间的一个或多个存储或转发中介(未示出)传递消息。可以理解,当传送消息(110、113和/或115等)时,连接可能在一个或多个点上失败。尽管如此,至少部分由于每一消息包含对每一消息组而言是唯一的会话标识符,且该信息在SOAP消息头部中对SOAP-理解路由器可用,所以可以容许连接暂停和失败。
具体地,失败、暂停或重启的通信会话中的消息仍旧可以被路由至合适的处理节点,并最终以较佳的顺序或分组处理。例如,发送计算机系统100可以接收会话中的消息中的一条(例如,113)没有被正确发送的指示。发送计算机系统100可以仅将失败的消息与合适的会话(例如,117)标识符信息重新相关联,并再次发送该消息。
而且,发送计算机系统100处的应用程序103(以及接收计算机系统150处的应用程序160)在应用程序103崩溃的情况中可以重新连接至通信会话。例如,当应用程序103在创建一条或多条消息时,应用程序103可以为相关的消息组在合适的位置存储当前会话。例如,如果应用程序103崩溃,那么应用程序103可以创建新的面向会话的信道,并且也决定是否使用新的会话标识符,还是从存储中恢复会话标识符。如果该组没有被完全发送,那么应用程序103可以仅将新的面向会话的信道与恢复的会话标识符相关联。通过关于接收计算机系统150的讨论可以理解,当应用程序160在崩溃之后,它使恢复的会话标识符与新的面向会话的信道相关联时可以出现类似的进程。
这样,发送计算机系统100(以及接收计算机系统150)可以确保,消息110、113和115中的每一条被适当地作为合适会话的一部分通信,而无论它们对于合适的队列管理器而言以何种顺序发送或接收,从而可以适当地发送或处理它们。而且,因为发送计算机系统100不必向队列管理器130重新发送之前发送的消息,且接收计算机系统150不必使所有之前接收到的消息都从队列管理器140重新发送,所以节省了处理资源。
当接收计算机系统150接收组中的消息的一条或多条时,特定应用程序160的监听器模块145标识,正在发送需要由诸如应用程序160等一个应用程序处理的相关消息组。作为响应,监听器145启动用于将所接收的相关消息直接中继至合适的应用程序的面向会话的信道121。例如,接收计算机系统150通过标识自输入消息110、113等的头部信息中找到的一个或多个会话标识符(例如,117)来标识正在接收相关消息组。在另一实现中,当消息含有诸如“第一消息”或“最后消息”指示符等某些其它关联信息时,接收计算机系统150标识正在接收或已经接收了一组相关消息。
一般而言,通信会话中的每一消息在已定地址的队列123处接收,而无需被解包或以任何深度读取。当接收消息110、113和115时,队列管理器140可以瞬间存储消息,队列123可以按照在消息各自顺序标识符中所指示的,对所接收的消息排序。当然,如果会话中消息的会话信息指明,该会话是无序的,那么队列123在处理之前不必排序消息。这样,将在其中会话被指示为排序的会话的情形中实现顺序标识符。
例如,图1示出了消息110是排序的会话中将由应用程序160处理的三条消息中的一条。所接收的消息中的另一标识符可以指示出,消息110将与其它消息113和115同时处理,或者以任何顺序由单个处理节点消费,而不是顺序地。这样,在一种实现中,队列123缓冲在队列管理器140处每一所接收到的消息,直到接收到将被适当排序或处理的足够数量的消息。由于多个原因,这是有益的。
例如,由于连接路径中的转发中介的某些延迟,消息115可能在消息113之前到达。或者,对队列123的传输可能暂时失败。尽管可以就同一组重新开始传输,仍可能存在关于消息是如何被发送至队列123,或在队列123处如何接收消息的某些错误的排序。尽管如此,因为排序的会话中的每一消息可以与特定顺序标识符相关,可以相对容易地容许各种消息延迟。而且,因为当接收消息时,可以在缓冲器中存储消息,所以应用程序103和队列管理器130可以仅在其中没有正确中中继消息的该点上使用合适的会话标识符来重新创建消息,而不必重新处理和重新传输之前正确传输的消息。
在任何情况中,图1示出了,监听器模块145然后以合适的顺序采用所接收的消息110、113和115,并且通过面向会话的信道121将其传递至应用程序160用于处理。图1也示出了,对于另一应用程序的170的另一监听器147标识了定址到不同队列125的其它消息。从而,监听器147创建了不同的面向会话的信道127,它被用来将在队列地址125处接收到的相关消息传递至应用程序170。这样,图1中不同的监听器145和147可以通过不同的面向会话的信道121、127来区分不相关的相关消息组。而且,单个监听器145、147等可以适当地创建从队列管理器140处的队列至同一应用程序160或170的多个但是各个不同的面向会话的信道。
在任何情况中,当将所接收到的消息中的每一条传递至应用程序160之后,监听器模块145标识最后一条消息,并关闭面向会话的信道121,或者为消息的新的组重新开启新的或不同的会话。例如,在一种实现中,最后一条消息近被简单地推断为最终消息的顺序标识符。即,监听器模块145标识,消息115表示三条消息中的第三条,且消息110、113的每一个已经被接收。当然,最后一条消息的指示符也可以是在发送最后一条消息(例如115)之后由发送计算机系统发送的单独的消息,或者消息本身可以包含指示它仅是由发送计算机系统100发送的最后一条消息的指示符。同样,监听器模块145可以为相关消息的新会话开始新的、不同的面向会话的信道,且可以为相关消息的不同组同时(或顺序地)创建这样的会话。因此,可以实现在发送和接收计算机系统上的各种过程来确保相关消息的无关组的分离。
图2示出了以资源高效的方式通信多条相关消息的方法中的一连串动作,使得该多条消息可以按照预期由指定的应用程序处理。以下将关于图1讨论图2的动作,且图2的动作包括来自发送和接收计算机系统双方观点的动作。例如,图2示出,从发送计算机100观点,根据本发明的实现的方法包括创建相关消息组的动作200。动作200包括创建将在接收计算机系统处处理的相关消息的组,其中组中一条消息是第一消息,而组中的另一条消息是最后消息。例如,如果发送计算机系统100是为离散的通信会话而配置的,那么发送计算机系统100可以创建每一包含唯一会话ID的相关消息的组。或者,如果发送计算机系统100不是为会话配置的,那么发送计算机系统100可以由其它机制相关该消息,使得至少一条消息可被标识为组中的第一消息,而另一条消息可标识为组中的最后消息。
从发送计算机100的观点的方法也包括创建会话的动作210。动作210包括,为消息组创建面向会话的信道。例如,发送计算机系统100启动含有由队列管理器130维护的一个或多个状态层的面向会话的信道。队列管理器130将初始信道120的会话信息传递至应用程序103,而应用程序编写器105将会话ID插入组中每一相关消息。应用程序编写器105也可以插入指示该会话是排序的会话或排序对处理而言是不重要的,或消息组将由单个处理节点以任何顺序处理的头部信息。在排序会话的某些实例中,编写器接口105也可以在每一消息中插入指示消息该被排序和处理的特定顺序的顺序指示符(例如,“三条之一”)。这些和类似的插入功能也可以由应用程序103和/或队列管理器130二者中任一或者以共享的方式来执行。
从发送计算机100观点的方法也包括发送组的动作220。动作220包括向接收计算机系统处的可寻址队列发送消息组。例如,当准备好多个消息中的至少一条之后,发送计算机系统100将该组的相关消息110、113和115发送至队列管理器140处的已定地址的队列123。当消息被中继至接收计算机系统140处的其最终终点时,消息也可以通过一个或多个存储和转发点中继,在那里消息为一个或多个目的而被缓冲。如前所述,如果发送计算机系统100接收到相关消息中的一条失败或者没有被正确发送的指示,那么发送计算机系统100可以仅需将该消息与适当的会话ID重新相关联,并再次发送消息。最终,多个消息中的每一消息被中继至接收计算机系统140处的指定面向会话的队列123。
另外,图2示出从发送计算机100的观点的方法还包括创建不同会话的动作230。动作230包括为不同相关消息组创建不同的面向会话的信道。例如,与创建或者正确发送消息集同时,或者当创建或者正确发送消息组的最后消息115之后,应用程序103为相关的一条或多条消息(未示出)的新的、不同的组启动新的通信会话(未示出)。当然,如果没有还要发送的消息,那么不必创建新的会话。尽管如此,该应用程序确保,将以相关方式处理的每一相关消息集仅与一个离散的会话标识符相关联,使得不同的组各自含有一个不同的会话标识符。
如图所示,图2也示出从接收计算机150观点的以资源高效的方式处理相关消息组的方法,使得多条消息可以按预期被处理。具体地,图2示出从接收方观点的该方法包括接收一条或多条消息的动作240。动作240包括在队列处接收一条或多条消息,其中消息中的至少一条可标识为相关消息组的第一消息。例如,如果接收计算机系统150从配置为理解通信会话的发送计算机系统处接收消息组,那么接收计算机系统可以通过标识包含在消息头部中的会话消息来容易地标识相关组。或者,如果发送计算机系统100没有被配置成实现通信会话,而是被配置成与消息分组合作,那么接收计算机系统150使用其它标记标识相关分组,诸如通过在所接收消息组中标识第一消息和最后消息指示符。
图2的从接收计算机150观点的方法也包括创建会话的动作250。动作250包括为消息组创建面向会话的信道。接收计算机系统150处的监听器模块145启动被用于将消息从队列123传递至应用程序160的面向会话的信道121。当在排序会话的情况中在队列管理器140处适当地排序消息时,面向会话的信道121被用于传递所接收的消息110、113、115至应用程序160。如果合适,可以在接收消息时这样做,使得应用程序170可以部分地处理相关消息组。或者,诸如在无序会话的情况中,一旦接收到所有消息和/或一旦为与消息组无关的新的相关消息组启动新的面向会话的信道后,就可以通过面向会话的信道将消息传递至应用程序160。
从而,从接收计算机150观点的图2的方法也包括接收组中最后消息的动作260。动作260包括接收消息组的最后消息。例如,消息110可以包括指示该消息将被作为三条消息序列中第一消息处理的顺序标识符。或者,在另一种实现中,多条消息中的每一消息内包含的分离的消息(未示出)用作为消息会话的索引,并描述会话中的消息的数量和每一消息的顺序,以及它们该被如何处理。在任何情况中,最后消息向接收计算机系统150指示,通过该面向会话的信道将不再发送消息,假定已经接收到与该会话相关联的所有其它消息。
从接收计算机观点的图2的方法还包括创建不同会话的动作270。动作270包括,当接收不同相关消息组的第一消息之后,创建不同的、后继面向会话的信道。例如,在一种实现中,监听器模块145保持该面向会话的信道可用,直到标识最后消息,或者在标识会话中的所有消息都已经被接收并通过该面向会话的信道121传递至应用程序160之后。即,监听器模块保持该面向会话的信道开启,直到例如,接收到每一消息110、113、115,或例如,接收到“三条中的一条”、“三条中的两条”和“三条中的三条”等。
在接收到与消息组无关的新消息之后,监听器145可以为消息的新分组启动不同的通信会话。这允许接收计算机系统将相关消息组安排或组织成分离的会话。这还允许接收计算机系统150和发送计算机系统100来确保如果合适,消息是被作为组和/或以指定的顺序被处理的。同样,不会在无意中将作为另一会话或分组的一部分发送的不同的相关消息组(未示出)同另一相关消息组一起处理。
从而,本发明的实现提供可以以指定的方式发送和处理消息组的多种方式,而无需分组中的每一消息以任何显著的方式被解包或读取。而且,本发明的实现允许特定通信会话(有序或无序)中的消息以排队的方式发送,使得相关消息可以以由发送计算机系统指定的任何顺序(或缺省)在单个处理节点处被处理。而且,因为会话中的消息可以与会话标识符相关联,所以本发明的实现为传输甚至是应用程序失败作了准备。例如,本发明的实现允许发送和接收队列管理器在传输中在各个序列处停止或开始传输,和/或重新启动与恢复得到的会话标识符的关联,而无需发送或接收计算机系统去发送或接收重复的之前的数据。
另外,因为消息可以被分组成定址到特定队列和面向会话的信道的特定通信会话,本发明的实现允许适当地分组消息,而不与其它相关消息组混合。在一个实例中,这提供了资源效率,因为在接收计算机系统处不需排序消息和从分组中清除消息。而且,尤其关于诸如SOAP消息等消息,因为每一会话可以被定址到消息头部中的特定队列,所以通过离散的通信会话信道发送的消息在到达该定址的队列或应用程序之前,不需因诸如寻址的目的而被反串行化或解码。
图3和以下讨论旨在提供可在其中实现本发明的合适的计算环境的简要、概括描述。尽管不是必需的,但本发明将在诸如由网络环境中的计算机执行的程序模块等计算机可执行指令的通用语境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。与数据结构相关联的计算机可执行指令,以及程序模块表示用于执行此处所揭示的方法的步骤的程序代码装置的实例。这样的可执行指令或相关联的数据结构的特定序列表示了用于以这样的步骤实现功能的相应动作的示例。
本领域的技术人员可以理解,本发明可以在使用多种类型的计算机系统配置的网络计算环境中实现,包括个人计算机、手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、网络PC、小型机、大型机等。本发明也可以在分布式计算环境中实现,其中本地和远程处理设备执行任务并通过通信网络(或者由硬连线、无线电线路或者由硬连线或无线电线路的组合)。在分布式计算环境中,程序模块可以位于本地和远程计算机存储介质中。
参考图3,用于实现本发明的示例性系统包括常规计算机320形式的通用计算设备,包括处理单元321、系统存储器322和将包括系统存储器322在内的各种系统组件耦合至处理单元321的系统总线323。系统总线323可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。系统存储器包括只读存储器(ROM)324和随机存取存储器(RAM)325。基本输入/输出系统(BIOS)326包含有助于诸如启动时在计算机320中元件之间传递信息的基本例程,它通常存储在ROM 324中。
计算机320还可以包括从磁性硬盘339中读取或向其写入的磁性硬盘驱动器327,从可移动磁盘329中读取或向其写入的磁盘驱动器328,以及从诸如CD ROM或其它光学介质等可移动光盘331中读取或向其写入的光盘驱动器330。磁性硬盘驱动器327、磁盘驱动器328和光盘驱动器330分别由硬盘驱动器接口332、磁盘驱动器接口333和光盘驱动器接口334连接至系统总线323。驱动器及其相关联的计算机可读介质为计算机320提供了对计算机执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管此处所示的示例性环境使用磁性硬盘339、可移动磁盘329和可移动光盘331,也可以使用其它类型的计算机可读介质,它们用于存储可使用的数据,包括盒式磁带、闪存卡、数字多功能盘、贝努利盒式磁盘、RAM、ROM等。
可以在硬盘339、磁盘329、光盘331、ROM 324或RAM 325上存储包含包括操作系统335、一个或多个应用程序模块336、其它程序模块337和程序数据338的一个或多个程序模块的程序代码装置。用户可以通过诸如键盘340和定点设备342或诸如麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等其它输入设备(未示出)向计算机320输入命令和信息。这些和其它输入设备通常由耦合至系统总线323的串行端口接口346连接至处理单元321。或者,输入设备可以由诸如并行端口、游戏端口或通用串行总线(USB)等其它接口连接。监视器347或另一显示设备也经由诸如视频适配器348等接口连接至系统总线323。除监视器之外,个人计算机一般包括其它外围输出设备(未示出),诸如扬声器和打印机。
计算机320可使用至一台或多台远程计算机,诸如远程计算机349a和349b的逻辑连接在网络化环境中操作。远程计算机349a和349b各自可以是另一台个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,且通常包括上文相对于计算机320描述的许多或所有元件,尽管在图3中只示出存储器存储设备350a和350b以及其相关联的应用程序336a和336b。图3中所示逻辑连接包括此处作为示例而非限制示出的局域网(LAN)351和广域网(WAN)352。这样的网络环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。
当在LAN网络环境中使用时,计算机320通过网络接口或适配器353连接至局域网351。当在WAN网络环境中使用时,计算机320通常包括调制解调器354、无线电线路或用于通过诸如因特网等广域网352建立通信的其它装置。调制解调器354可以是内置或外置的,它通过串行端口接口346连接至系统总线323。在网络化环境中,相对于计算机320所描述的程序模块或其部分可以存储在远程存储器存储设备中。可以理解,所示的网络连接是示例性的,且可以使用通过广域网352建立通信链路的其它手段。
本发明可以被具体化为其它具体形式,而不背离其精神或基本特征。所述的实施例在所有方面都被认为仅是说明性的而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述来指示。落在本发明权利要求书等效实现方式的意义和范围内的所有变化在权利要求书的范围内包括。