为子任务协调通信介质状态的制作方法

文档序号:6359910阅读:174来源:国知局
专利名称:为子任务协调通信介质状态的制作方法
为子任务协调通信介质状态
背景技术
I.背景和相关技术计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境中。随着计算机化的系统日益普及,此类系统内采用的软件和硬件的复杂度也日益增力口。一般而言,对看起来愈加复杂的软件的需求持续增长,这进一步趋向于成为推动硬件更大开发的动力之一。例如,如果应用程序对给定硬件系统要求太高,则该硬件系统可能效率 低下地操作,或者完全无法处理该应用程序。然而,应用程序开发的目前趋势通过至少部分地使用分布式应用程序已移除了许多这些类型的硬件约束。一般而言,分布式应用程序包括可对若干不同的硬件组件执行的组件。分布式应用程序在其实现中通常是大型、复杂和多样化的。可以理解,尽管通过若干不同计算机系统组合处理能力的这一能力可能是优点,但存在着与分布式应用程序模块相关联的各种复杂性。例如,应用可根据在通信介质上接收的消息的内容改变内部状态。除了应用状态改变之外,通信介质也可改变状态(例如,因为它不再包含消息)。一般而言,接收消息的进程涉及至少两个步骤a)应用访问消息内容以及b)通信介质的状态被更新。当这两个步骤被耦合到单个接收功能时,协调应用和通信介质中的相应状态改变可能是困难的。例如,消息的递送更改了通信介质的状态,因为在递送之后,消息不再存在于通信介质中。消息的接收也更改了应用的特定定制逻辑所确定的该应用的状态。定制逻辑可能需要访问正在递送的消息的内容。因此,在对消息内容的访问耦合到通信介质中的状态改变时,可能会发生处理困难(例如,竞争对手应用消费者进行的重复且不适当的处理)。在一些环境中,该困难可通过允许应用在同一两阶段提交事务中执行通信介质上的接收功能及其自己的内部状态改变来部分解决。然而,在这样的情况下,应用无法使用两阶段提交事务作为决定其最终状态的进程的一部分。这例如会在应用曾执行多个处理尝试来到达最终状态的情况下发生。当未完成或部分状态改变发生时,还引入了其它复杂性。即,应用状态改变可能表示处理接收到的消息的前向进展,但不是从通信介质中删除消息的充分进展。这些和类似的复杂性在导致多个独立子任务的消息处理系统中是普遍的。例如,处理作为批量较小消息的消息或处理并行调用若干进程的消息的消息处理系统可能导致不足以从通信介质中删除消息的部分或未完成状态改变。概述本发明涉及用于为子任务协调通信介质状态的方法、系统和计算机程序产品。消息状态协调器从消息消费者接收消息内容的内容视图以及协调属性。消息消费者从连接至计算机体系结构的通信介质接收内容视图。内容视图的接收指示通信介质锁定了该消息供消费者进行排他性访问。协调属性提供关于消息消费者如何回过来向通信介质信令消息的处置的信息。消息状态协调器将内容视图分成一串子任务消息。每一子任务消息对应于应用的部分应用状态更新且包括子任务协调属性。每一子任务协调属性提供关于如何回过来向消息状态协调器信令相应子任务消息的处置的信息。多个子任务消息者中的一个或多个子任务消费者向子任务消息串发送消息请求。一个或多个子任务消费者中的每一个从子任务消息串接收消息内容的内容视图以及用于内容视图的子任务协调属性。内容视图的接收指示子任务消息串锁定了该子任务消息供子任务消费者进行排他性访问。子任务协调属性提供关于如何回过来向子任务消息串信令子任务消息的处置的信息。一个或多个子任务消费者中的每一个尝试基于相应的接收到的内容视图来部分·更新应用的应用状态。一个或多个子任务消费者中的每一个基于所尝试的部分应用状态更新来确定相应子任务消息的处置。一个或多个子任务消费者中的每一个使用相应的子任务协调属性回过来向子任务消息串信令相应的子任务消息的处置。子任务消息串将信令者转发给消息状态协调器。因此,对每一子任务消息,消息状态协调器从消费子任务消息的子任务消费者接收一个或多个子任务信号。一个或多个子任务信号指示对子任务消息的处置。消息状态协调器基于任何接收到的子任务信号来确定对消息的处置。消息状态协调器使用消息的协调属性来向消息消费者信令对消息的处置。提供本概述以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本概述并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。


为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中图I示出了便于为子任务协调通信介质状态的示例计算机体系结构。图2示出了用于为子任务协调通信介质状态的示例方法的流程图。图3示出了便于根据嵌套事务范围为子任务协调通信介质状态的示例计算机体系结构。图4示出了用于在之后时间将失败的子任务消息重新插入到子任务消息串中的示例计算机体系结构。
详细描述本发明涉及用于为子任务协调通信介质状态的方法、系统和计算机程序产品。消息状态协调器从消息消费者接收消息内容的内容视图以及协调属性。消息消费者从连接至计算机体系结构的通信介质接收内容视图。内容视图的接收指示通信介质锁定了该消息供消费者进行排他性访问。协调属性提供关于消息消费者如何回过来向通信介质信令消息的处置的信息。消息状态协调器将内容视图分成一串子任务消息。每一子任务消息对应于应用的部分应用状态更新且包括子任务协调属性。每一子任务协调属性提供关于如何回过来向消息状态协调器信令相应子任务消息的处置的信息。多个子任务消息者中的一个或多个子任务消费者向子任务消息串发送消息请求。一个或多个子任务消费者中的每一个从子任务消息串接收消息内容的内容视图以及用于内容视图的子任务协调属性。内容视图的接收指示子任务消息串锁定了该子任务消息供子 任务消费者进行排他性访问。子任务协调属性提供关于如何回过来向子任务消息串信令子任务消息的处置的信息。一个或多个子任务消费者中的每一个尝试基于相应的接收到的内容视图来部分更新应用的应用状态。一个或多个子任务消费者中的每一个基于所尝试的部分应用状态更新来确定相应子任务消息的处置。一个或多个子任务消费者中的每一个使用相应的子任务协调属性回过来向子任务消息串信令相应的子任务消息的处置。子任务消息串将信令者转发给消息状态协调器。因此,对每一子任务消息,消息状态协调器从消费子任务消息的子任务消费者接收一个或多个子任务信号。一个或多个子任务信号指示对子任务消息的处置。消息状态协调器基于任何接收到的子任务信号来确定对消息的处置。消息状态协调器使用消息的协调属性来向消息消费者信令对消息的处置。相应地,在一些实施例中,(无论在初始消费者还是子任务消费者处的)消息接收功能被分割成访问动作和分开的锁定动作。消费者分开地执行这些动作,同时在它们之间执行内部状态更新。这种分割允许消费者在向通信介质或子任务消息串信令接收操作的完成(例如,从通信介质或子任务消息串逻辑地删除消息)之前确定其最终状态。应用可被分发给若干竞争的消费者。在第一分立动作中,消费者或子任务消费者之一访问(或“瞥视”)消息的内容。在第二分立动作中,通信介质或子任务消息串在消息接收期间,将消息分别锁定给进行访问的消费者或子任务消费者。消息访问或“瞥视”可触发消息锁定。因此,动作的分割还可显著地增加应用仅接收消息一次的几率。状态协调还可通过允许消费者围绕其内部状态改变和删除操作使用两阶段的提交事务来进一步增强。本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内 的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在还利用(或甚至主要利用)传输介质的计算机系统组件中。计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。图I示出了便于为子任务协调通信介质状态的示例计算机体系结构100。参考图1,计算机体系结构100包括通信介质127、消息流128和应用101。应用101跨可能在不同机器上的多个应用实例分布,包括应用实例IOlA和应用实例101B。应用实例IOlA还包括初始消费者102A、消息状态协调器103A、子任务消费者102A1和子任务消费者102A2。应用实例IOlB还包括初始消费者102B且还可包括类似于应用实例IOlA中包括的那些组件的其它组件。所描绘的组件中的每一个可通过诸如例如局域网(“LAN”)、广域网(“WAN”)和甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP,,)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP,,)等)。通信介质127可以是可向应用提供消息的基本上任何类型的介质,诸如例如队列系统或数据库。因此,通信介质127可携带消息流128。消息流128包括多个消息,包括消息 131、132 和 133。消息流128的消息可从某个其它网络可连接系统或设备发送以便递送到应用101。或者,消息流128可来自与应用101相同的计算机系统上的另一应用或甚至应用101的不同应用实例之间。即,应用101的一个应用实例可向通信介质127发送消息。随后,应用101的另一应用实例可从通信介质127接收消息。多个应用实例每一个处的初始消费者可以是对通信介质127上的消息的竞争消费者。例如,初始消费者102A和102B可处于对来自通信介质127的消息的竞争之中。为诸如伸缩性等任何数目的原因,多个应用实例(101A、10IB等)可在物理上跨多个节点分布。每一应用实例可具有(应用101的)应用逻辑的副本,以便竞争从通信介质127递送的消息。因此,存在并发运行、彼此竞争来自通信介质127的消息的(应用101的)应用逻辑的若干个应用实例。 在这样的环境中,一次可有一个竞争消费者来检查消息。通信介质127可锁定正由应用实例检查的消息。例如,通信介质127可在初始消费者103B检查消息133时锁定消息 133。当消息被锁定时,另一竞争消费者看见消息流中的下一消息作为紧接在锁定消息后的消息。通信介质127可维护指向消息流128中的下一可用消息(即还没有被消费者检查的消息)的下一消息指针。例如,消息介质127可维护下一消息指针191。因此,当初始消费者102B正在检查消息133时,下一消息指针191指向消息132。从而,初始消费者102A(以及其它应用实例处的初始消费者)看见消息132作为下一消息。从而,在通信介质127对消息133维护锁定的同时,初始消费者102A被许可检查(或“瞥视”)消息132。在状态转移之后,初始消费者102B可信令通信介质127来删除消息133。删除信号完成了对消息的成功接收。或者,如果应用实例IOlB不能接受消息133,初始消费者102B还可信令通信介质127来释放消息133的锁(即,解锁)。解锁完成了对消息的不成功接收。在一些实施例中,应用实例通过执行接收功能从通信介质接收消息内容。消息内容是因该接收功能的执行而返回的对象。在一些实施例中,接收功能向应用实例(初始消费者)给予对消息内容的锁定副本的视图。例如,消费者102A可执行接收功能来使消息132内容的视图作为对象返回给初始消费者102A。在这些实施例中,标准接收功能(例如,返回实际消息的功能)可被过载(overload)以返回对消息的锁定副本的视图(与实际消息相对)。接收功能的过载便于应用代码内(诸如前端消息处理流水线中)的某一水平的多态性。消息对象然后可用与消息相关联的属性来扩展。属性是通信介质正保持并与消息关联的临时状态的一部分的抽象。消费者与属性交互来完成消息接收。当向消费者提供消息内容的锁定视图时,属性可指示该视图被锁定(例如,值可被设置为锁定)。属性可被检查以防止通信介质127向另一消费者提供同一消息的内容的视图。当对内容视图的处理完成时,消费者或者可信令通信介质中的消息的删除(例如,将属性值设置为删除)或可信令锁的释放(例如,将属性值设置为解锁)。因此,临时状态可以是防止其它竞争消费者访问消息内容的消息“锁”。因此,一个消费者可请求接收消息。响应于该请求,扩展的通信介质行为向该消费者提供消息内容的视图,并锁定该消息防止其它竞争消费者访问。这个消费者然后可成功地完成接收进程(即,信令删除)或失败地完成接收进程(即,信令解锁)。例如,初始消费者102A可向通信介质127发送请求134。请求134可以是对来自通信介质127的消息的请求。通信介质127可接收请求134,并参考下一消息指针191来标识消息132是下一可用消息。当消息被锁定时,下一消息指针191可从当前消息移到下一消息(根据消息流128,通信介质127可以是先进先出(“FIFO”)的)。因此,当消息133被锁定(即,例如初始消费者102B的另一消费者正在查看消息133的内容时),下一消息指针191可被调整为指向消息132。因此,响应于请求134,通信介质127可向初始消费者102A提供内容视图132V(例如,消息132的消息正文的视图)。通信介质127可锁定消息132来防止诸如消费者102B等其他初始消费者的另外访问。锁定消息132可包括将消息132的属性132P(或其它临时消息状态)的值改为锁定。初始消费者102A可从通信介质127接收内容视图132V。初始消费者102A可将内容视图132A以及对属性132P的访问权传递给消息状态协调器103A。
图2示出了用于为子任务协调通信介质状态的示例方法200的流程图。方法200将参考计算机架构100的组件和数据来描述。方法200包括消息状态协调器接收消息的内容视图和协调属性的动作(动作201)。例如,消息状态协调器103A可从初始消费者102A接收内容视图132A和对属性132P的访问权。方法200包括消息状态协调器将内容视图分成一串子任务消息,每一子任务消息具有子任务协调属性的动作(动作202)。例如,消息划分器104A可将内容视图132V分成子任务消息串107。子任务消息串107可携带消息流192。消息流192包括一串子任务消息,包括子任务消息121、122和123。消息流192中的每一子任务消息对应于应用101的部分应用状态更新(例如,应用状态更新112A的部分更新)。子任务消息串107中的每一子任务消息可包含内容视图132V(因此以及消息132)的内容的一部分。或者或组合地,消息状态协调器103A可基于子任务,改变子任务消息串中子任务消息的内容。例如,如果两个子任务要并行执行同一操作(有可能使用两个不同的方法并取首先完成的备选方案作为答案),则消息内容在两个子任务之间可能是相同或基本类似的。在另一方面,如果内容视图132V表示包含各种不同任务的批任务,则每一子任务消息的内容可能是对正在执行的操作特别制作的。消息流192中的每一子任务消息与子任务协调属性(类似于属性132P)相关联。子任务协调属性提供关于如何回过来向消息状态协调器信令对相应子任务消息的处置(例如,锁定、解锁、删除)的信息。例如,消息状态协调器103A还可创建子任务协调属性156。子任务协调属性156中的每一子任务协调属性可对应于消息流192中的子任务消息。例如,子任务协调属性121PU22P和123P可分别对应于子任务消息121、122和123。尽管分开描述,子任务协调属性或者可与子任务消息串中的每一子任务消息一起存储。例如,子任务协调属性121PU22P和123P可分别附连于子任务消息121、122和123或包含在子任务消息121、122和123内。在一些实施例中,消息状态协调器使用参考计数来对原始消息的信令进行控制。在初始化时,消息状态协调器参数计数被置为零。参考计数对子任务消息串递增1,并对置于子任务消息串中的每一消息递增I。执行进一步的递增以实现消息复制或将子任务分成子任务的子任务。参考计数对接收到的每个信号(不论是来自子任务还是来自子任务消息串)递减I。消息状态协调器可使用参考计数到达零作为用于信令对原始消息的处置的触发。例如,消息状态协调器可维护参考计数106A。在创建子任务消息串107时,消息状态协调器103A可将参考计数106A置为一。参考计数106A在消息状态协调器103A将每一子任务消息(例如,121、122、123等)置于子任务消息串107中时进一步递增。当从子任务收回信号(指示对子任务消息的处置)或从子任务消息串107收回信号(例如,指示子任务消息串107的结束)时,参考计数106A递减。消息状态协调器103A可使用参考计数106A到达零来作为用于回过来向初始消费者102A信令对内容视图132A的处置的触发。无论递增还是递减操作均可以是事务知晓的;因此 ,例如,一事务下信号的发生在该事务回退的情况下可引起该信号以及递减操作两者被撤销。方法200包括向子任务消息串发送请求的动作(动作203)。例如,子任务消费者102A1可向子任务消息串107发送请求144。请求144可以是对来自子任务消息串107的消息的请求。子任务消息串107可接收请求144并标识下一可用消息(例如,使用类似于下一消息指针191的下一消息指针)。例如,子任务消息串107可将子任务消息122标识为下一可用消息。因此,响应于请求144,子任务消息串107可向子任务消费者102A1发送内容视图122V (例如,消息122的消息正文的视图)。子任务消息串107可锁定消息122来防止诸如子任务消费者102A2等其他子任务消费者的另外访问。锁定消息122可包括将消息122的子任务协调属性122P (或其它临时消息状态)的值改为锁定。子任务消息串107还可向子任务消费者102A1指示子任务协调属性122P的位置。方法200包括接收子任务消息的内容视图和对应的子任务协调属性的动作(动作204)。例如,子任务消费者102A1可从子任务消息串107接收内容视图122V。子任务消费者102A1还可从子任务消息串107接收对子任务协调属性的位置的指示。方法200包括基于内容视图122V尝试更新应用状态的动作(动作205)。例如,子任务消费者102A1可基于内容视图122V尝试应用状态更新113A1以部分更新应用101的应用状态。方法200包括确定对子任务消息的处置的动作(动作206)。例如,子任务消费者102A1可基于应用状态更新113A1的成功与否确定对子任务消息122的处置。成功的状态更新可源于子任务消费者102A1在没有出错的情况下处理了内容视图122A。另一方面,在子任务消费者102A1对内容视图122A的处理期间存在错误时,导致不成功的状态更新。方法200包括使用子任务协调属性来信令子任务消息处置的动作(动作207)。例如,子任务消费者102A1可使用子任务协调属性122P,发送指示对子任务消息122的处置的信号147。信号147可指示子任务消息122是要被删除还是被解锁。例如,子任务消费者102A1可分别将子任务协调属性122P的值从锁定改为解锁,或从锁定改为删除。删除的信号可在应用状态更新113A1成功时发送。另一方面,解锁的信号可在应用状态更新113A1不成功时发送。方法200包括对每一子任务消息,从子任务消费者接收关于对应的子任务属性的一个或多个子任务信号的动作(动作208)。例如,消息状态协调器103A可接收指示对子任务消息122的处置的子任务信号147S (对应于信号147)。子任务信号147S可基于子任务协调属性122P的值的改变(例如,分别从锁定到解锁或从锁定到删除)。当其它子任务消息在其它子任务消费者处(例如,在子任务消费者102A2处)处理时,消息状态协调器103A还可接收对应其它子任务消息的其它子任务信号。例如,消息状态协调器103A可接收分别指示对子任务消息121和123的处置的信号146S和148S。当子任务消息串107中的所有消息被处理时,子任务消息串107可将串结束(EOS)信号151发送给消息状态协调器103A。其它更复杂的语义还可在消息状态协调器103A与子任务消费者之间基于接收到的子任务消息处置信号出现。在一些实施例中,来自消息状态协调器103A的消息的产生取决于所接收到的子任务信号(146S、147S、148S等)以及可能的其它外部事件。例如,子任务消费者更新应用状态的成功与否可导致消息状态协调器103A添加、删除、或修改子任务消息串107中还没有被子任务消费者观察到的即将到来的消息。当子任务消息串中的子任务消息解锁时,子任务消息可再次对其它子任务消费者可用以供处理。因此,在一些实施例中,子任务消息被重试。图4示出了用于在之后时间将失败的子任务消息重新插入到子任务消息串407中的示例计算机体系结构400。消息状态 协调器将子任务消息421、422等插入到子任务消息串407中。(子任务消息421的)内容视图421V被发送到子任务消费者。失败信号446从子任务消费者收回(指示子任务消息421要被解锁)。(子任务消息422的)内容视图422V也被发送到子任务消费者。成功信号446从子任务消费者收回(指示子任务消息422要被删除)。消息状态协调器将子任务消息421重新插回到子任务消息串407中子任务消息422之后。(子任务消息421的)内容视图421V再次被发送到子任务消费者(该消费者可以是同一或不同的子任务消费者)。成功信号448从子任务消费者收回(指示子任务消息421要被删除)。到达串结束标记452。串结束449被发送给子任务消费者,且EOS信号451被发送给消息状态协调器。本发明的一些实施例包括用于检测何时有消息重新传递的机制。例如,结合应用簿记的唯一标识符可被用于跟踪已经作出了处理消息的多少次尝试。或者(且可能更有用地),可将重试属性附连于消息。重试属性可存储指示已经进行了处理消息的多少次尝试的重试尝试计数。对处理消息的每一尝试,重试尝试计数可被递增。从而,消息状态协调器103A有可能对子任务消息接收多个信号,诸如最终继之以删除信号的一个或多个解锁信号。方法200包括基于任何接收到的子任务信号确定对消息的处置的动作(动作209)。例如,消息状态协调器103A可基于子任务信号146S、147S、148S等确定对消息132的处置。当所有子任务信号基于子任务消息指示成功的部分状态更新时,消息状态协调器103A确定对消息132的处置是成功的。另外,当一个或多个子任务不会改变消息132的当前处置(无论其成功与否)且不能被重试时,消息状态协调器103A可从子任务消息串107丢弃其余的子任务消息。消息状态协调器103可这样做,因为处理任何其它子任务消息不会改变对消息132的处置。当来自之前分发的子任务消息的子任务信号不会改变失败的处置时,消息状态协调器103还可信令对消息132的处置而不必等待这些子任务信号。
在一些实施例中,无法成功处理子任务消息是致命的错误。例如,如果子任务的处理是必要的且不能被重试的,则任何一个子任务的失败指示原始消息的失败。在这些实施例中,在接收到不能重试的必要子任务消息的失败信号时,消息状态协调器103A可被编程来立即将对消息132的处置确定为失败的。方法200包括使用消息的协调属性来信令对消息的处置的动作(动作210)。例如,消息状态协调器103A可向初始消费者102A发送信号152。信号152将对消息132的处置指示为成功或失败。在对消息132信令成功之前,连同从子任务消息串107接收最终信号(E0S信号151),消息状态协调器103々可等待所有子任务信号(1463、1473、1483等)以信令成功。在另一方面,消息状态协调器103可在处理其它子任务消息不会改变对消息132的处置时发送信号152 (指示成功或失败)。信号152可直接或不可直接更新属性132P。初始消费者102A接收信号152。基于信号152,初始消费者102A可向通信介质127发送信号136。信号136可指示消息132是要被删除还是被解锁。例如,初始消费者102A可将属性132P的值分别从锁定改为解锁,或从锁定改为删除。删除的信号可在应用101的应用状态被成功更新时发送。另一方面,解锁的信号可在存在应用101的错误更新应用状 态时发送。通信介质127可从初始消费者102A接收信号136。通信介质127可基于信号136并响应于信号136来更新其状态。例如,在属性132P的值从锁定改为解锁时,通信介质127可解锁消息132,使得消息132可供其它应用实例使用。另一方面,在属性132P的值从锁定改为删除时,通信介质127可删除消息132。本发明的实施例还可包括在进程之间使用其它种类的协调机制。例如,可使用两阶段的提交事务作为进程间的协调机制。当试图一次仅执行一个进程时,采用上述协调机制组成的事务通常是有利的。对于原始消息,失败信号令事务中止(或回退)而成功信号是可被事务性保护的动作。应用可采用以上方法与事务一起来确保要么事务下执行的所有结果变为可见,要么没有结果变为可见。在一些实施例中,所有子任务均在单个事务下执行。在这些实施例中,子任务使用其中任何一个子任务的失败使得整个进程失败的以上模式。事务可与子任务消息串显式相关联,或可当在环境事务存在的情况下信号首次被执行时被“捕捉”。可通过使消息状态协调器记录所使用的事务并将其与信令操作期间存在的任何将来事务进行比较,来执行验证以检查所有子任务均在同一事务下执行(且对原始消息的处置最终也使用该事务)。用于在单个事务下执行所有子任务的替换实施例可在子任务是幂等的或类似地支持至少一次执行时使用。如果子任务可被执行超过一次,则可使用多个处理尝试来克服失败。因此,子任务的执行可在事务的范围外执行,以避免成功信号正在使用该事务执行的同时事务在失败期间回退。子任务消息串的会话结束指示可被扣住,直到成功信号的事务被提交,这样如果事务被回退,子任务仍可被重放。用于在单个事务下执行所有子任务的另一替换实施例使用嵌套事务。嵌套事务使用父子关系提供较大事务内的自包含事务范围。因此,父环境内的改变可以对孩子可见,而两个孩子环境使其改变彼此隔离。子任务可在附属于用于原始消息的事务的孩子事务中执行。转向图3,图3示出了便于根据嵌套事务范围为子任务协调通信介质状态的示例计算机体系结构300。如图所示,初始消费者302A在应用实例/父事务范围301A中操作。初始消费者302B在应用实例/父事务范围30IB中分开操作。此外,在应用实例/父事务范围30IA内,不同的子任务在不同的嵌套事务内操作。例如,子任务消费者302A1 (以及其他子任务消费者302A1A和302A1B)在嵌套孩子事务范围301A1中操作。另一方面,子任务消费者302A2在嵌套孩子事务范围301A2中操作。因此,应用实例/父事务范围30IA内的改变对每一嵌套孩子事务范围30IAl和301A2可见。然而,嵌套孩子事务范围301A1内的改变与嵌套孩子事务范围301A2隔离,反之亦然。在其它实施例中,当原始消息内子任务的关联是为方便而非指示工作单元的界限时,子任务甚至可使用任何组合的一个或多个事务来执行。从消息状态协调器到通信介质的信号可在一个或多个事务提交之后出现。用于原始消息的这一信号可在其它事务下执行,甚至可能非事务性地执行。从而,本发明的实施例使用接收到的消息内容的视图来产生一串子任务消息。这一串子任务消息中的每一子任务消息对应于独立的子任务。每一子任务消息与一递送属性 机制相关联,该机制用于执行与原始消息的状态协调方案类似的状态协调方案。子任务消息属性各自被连接至该机制以用于对原始消息执行状态协调方案。子任务消息可各自具有与原始消息相同的消息内容,或可具有根据子任务变化的消息内容。消息处理器然后可消费来自消息串的子任务消息,并对每一子任务消息执行状态协调方案以反映执行原始消息的部分前向进展。原始消息的状态协调方案的结果响应于子任务消息的状态协调方案的集体结果。本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
权利要求
1.在包括一个或多个处理器以及系统存储器的计算机体系结构中,所述计算机系统还包括用于在初始消息消费者和多个子任务消费者之间协调状态的消息状态协调器,一种用于在所述消息消费者和所述多个子任务消费者之间协调状态的方法,所述方法包括 所述消息状态协调器从所述初始消息消费者接收消息内容的内容视图以及协调属性的动作,所述消息消费者从连接至所述计算机体系结构的通信介质接收所述内容视图,接收内容视图指示通信介质已经锁定了所述消息供所述初始消费者排他性访问,所述协调属性提供关于所述初始消息消费者如何回过来向所述通信介质信令对所述消息的处置的信息; 所述消息状态协调器将所述内容视图分成一串子任务消息的动作,每一子任务消息对应于应用的部分应用状态更新,且每一子任务消息包括子任务协调属性,每一子任务协调属性提供如何回过来向所述消息状态协调器信令对相应子任务消息的处置的信息; 对每一子任务消息,所述消息状态协调器从消费所述子任务消息的子任务消费者接收一个或多个子任务信号的动作,所述一个或多个子任务信号指示对所述子任务消息的处置; 所述消息状态协调器基于所接收的子任务信号确定对所述消息的处置的动作;以及 所述消息状态协调器使用所述消息的协调属性来向所述初始消息消费者信令对所述消息的处置的动作。
2.如权利要求I所述的方法,其特征在于,所述计算机体系结构包括通信介质和包括所述初始消息消费者在内的一个或多个初始消息消费者,所述一个或多个初始消息消费者消费来自所述通信介质的消息,所述方法还包括在所述消息状态协调器接收所述消息的内容的内容视图之前 所述初始消息消费者向所述通信介质发送消息请求的动作; 所述初始消息消费者从所述通信介质接收所述消息的内容的内容视图以及所述协调属性的动作;以及 所述初始消息消费者向所述消息状态协调器发送所述消息的内容的内容视图以及所述协调属性的动作。
3.如权利要求2所述的方法,其特征在于,还包括在向所述初始消息消费者信令对所述消息的处置之后 所述初始消息消费者从所述消息状态协调器接收对所述消息的处置的动作;以及 所述初始消息消费者基于所接收到的对所述消息的处置向所述通信介质信令如何更新通信介质状态,以便协调所述通信介质状态和所述应用状态的动作。
4.如权利要求I所述的方法,其特征在于,所述消息状态协调器将所述内容视图分成一串子任务消息的动作包括将所述内容视图分成一串根据子任务变化的子任务消息的动作。
5.如权利要求I所述的方法,其特征在于,所述消息状态协调器将所述内容视图分成一串子任务消息的动作包括将所述内容视图分成一串包含所述内容视图的副本的子任务消息的动作。
6.如权利要求I所述的方法,其特征在于,所述消息状态协调器将所述内容视图分成一串子任务消息的动作包括在从所述一串子任务消息中的一部分子任务消息的子任务消费者接收子任务信号之后,基于从子任务消费者接收的一个或多个子任务信号更改所述一串子任务消息中的子任务消息的动作。
7.如权利要求I所述的方法,其特征在于,对于每一子任务消息,所述消息状态协调器从子任务消费者接收一个或多个子任务信号的动作包括接收指示对所有子任务消息的成功处理的信号的动作;且 其中所述消息状态协调器确定对所述消息的处置的动作包括基于所接收到的指示对所有子任务消息的成功处理的信号,确定对所述消息的处置成功的动作。
8.如权利要求I所述的方法,其特征在于,对于每一子任务消息,所述消息状态协调器从子任务消费者接收一个或多个子任务信号的动作包括接收指示对至少一个子任务消息的失败处理的信号的动作。
9.如权利要求8所述的方法,其特征在于,还包括 所述消息状态协调器基于所述至少一个子任务消息将一个或多个重试子任务消息插入所述子任务消息串中的动作; 所述消息状态协调器从消费所述一个或多个重试子任务消息的子任务消费者接收一个或多个子任务信号的动作; 且其中所述消息状态协调器基于所接收的子任务信号确定对所述消息的处置的动作包括所述消息状态协调器基于所接收到的对所述一个或多个重试子任务消息的一个或多个子任务信号确定对所述消息的处置的动作。
10.如权利要求8所述的方法,其特征在于,所述消息状态协调器确定对所述消息的处置的动作包括基于所接收到的指示子任务消息失败的信号确定对所述消息的处置失败的动作。
11.如权利要求I所述的方法,其特征在于,对于每一子任务消息,所述消息状态协调器从子任务消费者接收一个或多个子任务信号的动作包括在不同事务中从子任务消费者接收事务处置通知的动作。
12.如权利要求11所述的方法,其特征在于,所述不同事务是公共父事务中包含的一个或多个嵌套事务。
13.在包括一个或多个处理器和系统存储器的计算机体系结构中,所述计算机系统还包括处理来自子任务消息串的消息的多个子任务消费者,所述子任务消息串包括一串子任务消息,每一子任务消息是从消费者处接收的消息划分出来的且对应于在所述消费者处接收的所述消息的部分应用状态更新,一种用于在子任务消费者与所述子任务消息串之间协调状态的方法,所述方法包括 所述多个子任务消费者中的一子任务消费者向所述子任务消息串发送消息请求的动作; 所述子任务消费者从所述子任务消息串接收消息内容的内容视图以及所述内容视图的子任务协调属性的动作,接收所述内容视图指示所述子任务消息串已经锁定了所述子任务消息供所述子任务消费者排他性访问,所述子任务协调属性提供关于如何回过来向所述子任务消息串信令对所述子任务消息的处置的信息; 所述子任务消费者基于所述内容视图尝试部分更新应用的应用状态的动作; 基于所尝试的部分应用状态更新确定对所述子任务消息的处置的动作;以及所述子任务消费者使用所述子任务协调属性回过来向所述子任务消息串信令对所述子任务消息的处置的动作。
14.如权利要求13所述的方法,其特征在于,基于所尝试的部分应用状态更新来确定对所述子任务消息的处置包括确定所尝试的应用状态更新无法使所述应用转移到下一状态的动作; 其中所述子任务消费者使用所述子任务协调属性来信令对所述子任务的处置的动作包括所述子任务消费者使用所述子任务协调属性信令所述子任务消息要被解锁的动作;且还包括 所述多个子任务消费者中的第二子任务消费者向所述子任务消息串 发送消息请求的动作; 在所述子任务消费者解锁失败消息之后,所述第二子任务消费者从所述子任务消息串接收消息内容的内容视图以及所述内容视图的子任务协调属性的动作,接收所述内容视图指示所述子任务消息串已经锁定了所述子任务消息供所述子任务消费者排他性访问,所述子任务协调属性提供关于如何回过来向所述子任务消息串信令对所述子任务消息的处置的信息,所接收的消息基于失败消息; 所述第二子任务消费者基于所述内容视图尝试部分更新应用的应用状态的动作;基于所尝试的部分应用状态更新确定对所述子任务消息的处置的动作;以及所述第二子任务消费者使用所述子任务协调属性回过来向所述子任务消息串信令对所述子任务消息的处置的动作。
15.一种计算机系统,所述计算机系统包括 多个机器,每个机器包括 一个或多个处理器; 系统存储器; 通信介质,所述通信介质具有对所述计算机系统的消息的消息流; 一个或多个计算机存储介质上存储了表示应用的计算机可执行指令,其中所述可执行指令可被执行以创建多个应用实例,所述应用实例跨所述多个机器分布并竞争来自所述通信介质的消息,其中每一应用实例包括初始消费者、至少一个消息状态协调器和至少一个子任务消费者,其中所述初始消费者被配置成 向所述通信介质发送消息请求; 从所述通信介质接收消息的内容的视图以及协调属性,接收内容视图指示所述通信介质已锁定所述消息供所述初始消费者排他性访问; 将所述消息内容的内容视图以及所述协调属性发送给所述消息状态协调器; 从所述消息状态协调器接收对所述消息的处置;和 基于所接收到的对所述消息的处置向所述通信介质信令如何更新通信介质状态,以便协调所述通信介质状态和所述应用状态; 其中所述至少一个消息状态协调器被配置成 从所述初始消息消费者接收所述消息内容的内容视图以及所述协调属性; 将所述内容视图分成一串子任务消息,每一子任务消息对应于应用的部分应用状态更新,且每一子任务消息包括子任务协调属性,每一子任务协调属性提供如何回过来向所述消息状态协调器信令对相应子任务消息的处置的信息; 对每一子任务消息,从消费所述子任务消息的子任务消费者接收一个或多个子任务信号,所述一个或多个子任务信号指示对所述子任务消息的处置; 基于所接收到的子任务信号确定对所述消息的处置;和 使用所述消息的所述协调属性来向所述初始消息消费者信令对所述消息的处置;且 其中所述多个子任务消费者中的每一个被配置为 向所述子任务消息串发送消息请求; 从所述子任务消息串接收消息内容的内容视图以及所述内容视图的子任务协调属性,接收所述内容视图指示所述子任务消息串已经锁定了所述子任务消息供所述子任务消费者排他性访问,所述子任务协调属性提供关于如何回过来向所述子任务消息串信令对所述子任务消息的处置的信息; 基于所述内容视图尝试部分更新应用的应用状态; 基于所尝试的部分应用状态更新确定对所述子任务消息的处置;以及 使用所述子任务协调属性回过来向所述子任务消息串信令对所述子任务消息的处置。
全文摘要
本发明涉及用于为子任务协调通信介质状态的方法、系统和计算机程序产品。本发明的实施例使用接收到的消息内容的视图来产生一串子任务消息。子任务消息属性各自被连接至用于对原始消息执行状态协调方案的机制。子任务消息可各自具有与原始消息相同的消息内容,或可具有根据子任务变化的消息内容。消息处理器然后可消费来自子任务消息串的子任务消息,并对每一子任务消息执行状态协调方案以反映执行原始消息的部分前向进展。原始消息的状态协调方案的结果响应于子任务消息的状态协调方案的集体结果。
文档编号G06F9/44GK102804130SQ201180014318
公开日2012年11月28日 申请日期2011年3月11日 优先权日2010年3月18日
发明者N·A·艾伦, J·A·泰勒 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1