使用子队列来增强本地消息处理的制作方法

文档序号:6556571阅读:104来源:国知局
专利名称:使用子队列来增强本地消息处理的制作方法
技术领域
本发明涉及电子消息传送,尤其涉及使用子队列来增强本地消息处理。
背景技术
计算机系统和相关技术影响了社会的许多方面。实际上,计算机系统处理信息的能力已经改变了我们生活和工作的方法。现在计算机系统通常执行在计算机出现之前手工执行的大量任务(例如,字处理、日程安排以及数据库管理)。最近,计算机系统已彼此耦合并与其它电子设备耦合,以形成计算机系统和其它电子设备在其上能传送电子数据的有线和无线计算机网络。结果,可在计算机系统上执行的许多任务(例如,语音通信、访问电子邮件、控制家用电器、Web浏览、和打印文档)包括众多计算机系统和/或其它电子设备之间通过有线和/或无线计算机网络的电子消息的交换。
网络实际上已变得如此丰富,从而简单的网络-使能计算系统可在通常称为“因特网”的网络连接上与遍布全球的数百万其它计算系统的任一台通信。这种计算系统可包括台式、膝上型、或书写板个人计算机;个人数字助理(PDA);电话;或能够在数字网络上通信的任何其它计算机或设备。
为了在网络上通信,一个计算系统(在此通常称为“发送计算系统”)构建或以其它方式访问电子消息,并在网络上将该电子消息传送给另一个计算系统(在此称为“接收计算系统”)。当该电子消息是电子邮件或即时消息时,该电子消息由用户读取,或者相反可由运行在接收计算系统上的应用程序读取。该电子消息可在用户的可能帮助下通过运行在发送计算系统上的应用程序构建。
在一些环境中,各应用程序使用排队消息通信彼此通信。排队通信包括各机制,使发送应用程序将消息写入发送队列、该发送队列将消息传送给接收队列、以及接收应用程序从接收队列中读取消息。各队列保持通信各方之外的通信状态,并提供它们之间的间接性程度。因此,排队消息传送提供松散耦合的应用程序之间的可靠通信。消息的发送者和接收者使用中介队列管理器来进行通信,并可独立关闭和重新启动,甚至可有不重叠的使用期。排队还使客户机和服务器能“以它们自己的步调”收发消息,其中队列收紧了两端的间隙。
常常接收计算机系统会公布单个接收队列名称,从而其它计算机系统可将消息发送到接收队列中去。消息随后可从接收队列传递到适当应用程序。在一些环境中,消息从接收队列移到接收计算机系统上的其它队列中。例如,队列管理器可确定暂时不可处理排队消息(例如当适当应用程序不可用时)。因而,排队管理器可将该排队消息从接收队列移到另一队列,以便于使其它排队消息可用来处理。在稍后时间,队列管理器可将排队消息移回接收队列,并确定是否现在可处理该排队消息。
不时地,对于队列管理器而言,还有必要将接收队列中的各个消息分成各个组,以比如将各消息路由到不同处理单元。然而,队列通常是整体式的,并不具有任何组织结构。因而,接收队列中消息的适当分类仅可通过将消息移出接收队列并移入接收计算机系统的其它队列才能实现。
还可以是应用程序访问消息,并随后将其移到不同队列中。例如,当应用程序检测到一有害消息时(例如在处理消息时指定次数的失败读取或失败尝试之后),应用程序可暂时将该有害消息移到另一个队列(例如有害消息队列)中,所以可继续处理接收队列中的其它消息。然后在稍后时间,应用程序可将该有害消息移回接收队列并尝试再次读取并处理该有害消息。
然而,“移动”操作会是资源密集的。例如,移动操作可使消息物理地从一存储器位置移到另一存储器位置。
此外,当接收应用程序在队列之间移动消息时,会丢失向前赋予的标识信息(原始发送者的标识)。用于将一消息从一个队列移到另一个队列的典型机制是从一队列“Receive”(接收)并“Send”(发送)给另一队列。然而,在消息移动期间,消息通常离开消息传送系统(当调用Receive时)并再次进入消息传送系统(当调用Send时)。因而,消息传送系统在一段时间内无法跟踪该消息,并将再次进入的消息视为新消息。因为消息传送系统将该消息视为新消息,所以它会把移动者的标识赋予该消息,从而丢失原始发送者的标识。
在消息移动期间将消息从消息传送系统中移去出于至少一个原因是有问题的。因为该消息离开消息传送系统,Receive使传递确认(“ACK”)发送。原始的发送者可接收到ACK并将该ACK视为已满足传递保证的表示。即,该ACK向发送应用程序表示接收应用程序处理了该消息。然而,如果消息在队列之间传送,则到接收应用程序的实际传递可能尚未进行。因而,发送应用程序可不适当地将该消息视为已处理的。响应于该ACK,发送应用程序可将该消息从本地高速缓存中移除,并继续发送消息序列中的其它消息。
不幸的是,在接收应用程序将该消息移回到接收队列中并再次尝试处理该消息之后,会发生其它失败。最终,在指定次数的失败(以及可能队列之间的进一步移动)之后,接收应用程序可通知发送应用程序它不能处理该消息。作为响应,发送应用程序可尝试再次发送该消息。然而,因为发送应用程序先前响应于该ACK将消息从高速缓存中移去,发送应用程序可能没有办法表示该消息或访问该消息的内容。
也会出现其它问题。例如,因为策略原因(例如安全性或配额设置),新的队列会无法接受来自移动队列的消息。新队列无法接受消息会使该消息被移到移动者的死消息队列中。
因此,用于更有效和更准确地确认本地消息处理的系统、方法、计算机程序产品会是有利的。

发明内容
本领域现有状态的前述问题由本发明的诸原理解决,这些原理涉及使用子队列来增强本地消息处理的方法、系统、以及计算机程序产品。在一些实施例中,接收到的消息被分到子队列中。例如,队列管理器接收一消息,用于从发送应用程序传递给接收应用程序。该消息包括具有父值部分的队列标识符,在父值部分中存储了标识接收队列的父值。
队列管理器基于所存储的父值将消息排入接收队列中。接收应用程序检查排队消息。接收应用程序赋予标识接收队列的子队列的子队列下标值。应用程序将子队列下标值存储在队列标识符的下标值部分中,以便于根据消息检查在逻辑上将消息从接收队列移到接收队列的已标识子队列中。
在其它实施例中,消息在各队列之间移动。例如,队列管理器接收标识第一队列的第一句柄。该第一句柄包括标识队列的父部分的父值,以及标识队列的第一子部分的第一下标值。队列管理器使用该第一句柄来定位第一队列内的消息。该消息包括一队列标识符,具有存储父值的父值部分以及存储第一下标值的下标值部分。
队列管理器接收第二句柄,该第二句柄标识要接收定位消息的第二队列。该第二句柄包括相同的父值,以及标识队列的第二子部分的第二下标值。该队列管理器将第二下标值存储在队列标识符的下标值部分中,以便于在逻辑上将消息从第一队列移到第二队列。
根据本发明各原理划分并移动的消息可存储在计算机可读介质上。该消息可包括存储表示电子消息内容的内容值的内容字段。该消息可包括存储标识队列的队列标识符的队列标识符字段,在该队列中要排入内容字段中表示的电子消息的内容。该队列标识符字段还可包括存储标识队列父部分的父值的父值字段,以及存储标识队列子部分的下标值的下标值字段。
本发明的这些和其它特征及优点将从以下描述和所附权利要求中变得更加显而易见,或可从下文陈述的本发明实践中获知。


为了进一步阐述本发明的上述和其它优点及特征,本发明的更具体描述将参照附图中所示的特定实施例提交。可以理解,这些附图仅示出本发明的典型实施例并因此不被视为限制其范围。本发明通过使用以下附图以附加细节进行描述和说明图1A、1B和1C示出便于使用子队列来增强本地消息处理的计算机体系结构;图2示出用于划分队列内的排队消息的方法的示例流程图;图3示出用于在队列之间移动消息的方法的示例流程图;图4示出了本发明诸原理的适当操作环境。
具体实施例方式
本发明原理规定使用子队列来增强本地消息处理。在一些实施例中,接收到的消息被划分成子队列。例如,队列管理器接收消息,用于从发送应用程序传递到接收应用程序。该消息包括队列标识符,该队列标识符具有存储标识接收队列的父值的父值部分。
队列管理器基于所存储的父值将消息排入接收队列。接收应用程序检查排队消息。接收应用程序赋予标识接收队列子队列的子队列下标值。应用程序将子队列下标值存储在队列标识符的下标值部分中,以便于根据消息检查在逻辑上将消息从接收队列移到接收队列的已标识子队列中。
在其它实施例中,消息在各队列之间移动。例如,队列管理器接收标识第一队列的第一句柄。该第一句柄包括标识队列的父部分的父值,以及标识队列的第一子部分的第一下标值。队列管理器使用该第一句柄来定位第一队列内的消息。该消息包括一队列标识符,具有存储父值的父值部分以及存储第一下标值的下标值部分。
队列管理器接收第二句柄,该第二句柄标识要接收定位消息的第二队列。该第二句柄包括相同的父值,以及标识队列的第二子部分的第二下标值。该队列管理器将第二下标值存储在队列标识符的下标值部分中,以便于在逻辑上将消息从第一队列移到第二队列。
根据本发明各原理划分并移动的消息可存储在计算机可读介质上。该消息可包括存储表示电子消息内容的内容值的内容字段。该消息可包括存储标识队列的队列标识符的队列标识符字段,在该队列中要排入内容字段中表示的电子消息的内容。该队列标识符字段还可包括存储标识队列父部分的父值的父值字段,以及存储标识队列子部分的下标值的下标值字段。
本发明范围内的诸实施例包括携带或具有存储其上的计算机可执行指令或数据结构的计算机可读介质。这种计算机可读介质是任何可由通用或专用计算机系统访问的可用介质。作为示例,但非限制,这种计算机可读介质可包括物理存储介质,诸如RAM、ROM、EPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置、或任何可用来以计算机可执行指令、计算机可读指令、数据结构的形式实现或存储所需程序代码,以及可由通用或专用计算机系统访问的其它介质。
在本描述及其后权利要求书中,“网络”被定义为使能在计算机系统和/或模块之间的电子数据传输的一个或多个数据链路。当信息经网络或另一到计算机系统的通信连接(硬接线的、无线的、或硬接线或无线的组合)传送或提供时,该连接完全被视为计算机可读介质。因而,任何这种连接完全被称为计算机可读介质。以上组合也应包括于计算机可读介质的范围内。计算机可执行指令包括,例如使通用计算机系统或专用计算机系统执行某功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制的、诸如汇编语言的中间格式指令、或甚至源代码。
在本描述及其后权利要求书中,“计算机系统”被定义为一起工作以对电子数据执行操作的一个或多个软件模块、一个或多个硬件模块、或其组合。例如,计算机系统的定义包括个人计算机的硬件组件、以及诸如个人计算机操作系统的软件模块。这些模块的物理布局并不重要。计算机系统可包括通过网络耦合的一个或多个计算机。类似地,计算机系统可包括单个物理装置(诸如移动电话或个人数字助理“PDA”),其中内部模块(诸如存储器和处理器)一起工作以对电子数据执行操作。
本领域技术人员将理解,本发明可在具有许多类计算机系统配置的网络计算环境中实践,包括个人计算机、膝上型计算机、手持式设备、多处理器系统、基于微处理器或可编程的消费电器、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机等。本发明还可在分布式系统环境中实践,其中通过网络链接(通过硬接线数据链接、无线数据链接、或通过硬接线和无线数据链接的组合)的本地和远程计算机系统都执行任务。在分布式系统环境中,程序模块可位于本地和远程存储器存储装置中。
图1A、1B和1C示出便于使用子队列增强本地消息处理的计算机体系结构100(或其一部分)的示例。在计算机体系结构100(图1A)中示出的是计算机相同101、网络105和计算机系统111。计算机系统101和111的每一个都与网络105相连,比如局域网(“LAN”)、广域网(“WAN”)、甚或因特网。计算机系统连接网络105可从其它计算机系统连接网络105收发数据。因此,计算机系统101、111,以及其它相连计算机系统(未示出)可创建消息相关数据并在网络上交换消息相关数据(例如因特网协议(“IP”)数据包和使用IP数据包的其它高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。例如,计算机系统101和111创建SOAP包封(envelope),在网络105上交换SOAP包封,并接收SOAP包封。
计算机系统101包括应用程序102和队列管理器108。应用程序102可以是分布式应用程序的一部分,比如Web服务。队列管理器108包括并控制传输队列107的操作。例如,队列管理器108控制使消息排队以及从传输队列107中解散消息。
计算机系统111包括应用程序102和队列管理器118。应用程序112可以是分布式应用程序的一部分,比如Web服务。队列管理器118包括并控制接收队列117的操作。例如,队列管理器118控制使消息排入发送队列以及从发送队列117中输出消息。
应用程序102和应用程序112可以是同一分布式应用程序的各个部分。因而,不时地,应用程序102向应用程序112发送消息(并潜在地从中接收消息)。为了向应用程序112发送消息,应用程序102和队列管理器108可例如根据捕捉协议,使消息122排入传输队列107。然后在适当时候,队列管理器108可将消息122通过网络105传送给队列管理器118。
通常,消息可以是包括具有一个或多个数据字段的标头部分、以及具有一个或多个数据字段的主体部分的数据结构。例如,消息(例如消息122)可包括内容字段,它存储表示电子消息内容的内容值(例如由内容127表示)的内容字段。消息还可包括队列标识符字段,它存储标识其中要排入在内容字段中表示的电子消息内容的队列(例如由队列ID 123表示)的队列标识符值。队列标识符字段还可包括存储标识队列父部分的父值(例如由父值124表示)的父值字段,以及标识队列子部分的下标值(例如由下标值136表示)的下标值字段。其它字段也可包括在用于表示消息的数据结构中。
队列标识符可根据各种不同命名方案来格式化。在一些实施例中,队列标识符包括固定长度的父值和固定长度的下标值。在其它实施例中,队列标识符包括可变长度的父值和固定长度的下标值。这些其它实施例提供对于父值的附加灵活性,并允许下标值的原地变化。在另外的实施例中,队列标识符包括可变长度的下标值。在这些另外实施例中,保留了最大可能下标值的足够空间。
应用程序可为每个队列定义任何数量的本地子队列。例如,应用程序112可为队列117定义子队列117A和117B。子队列保留导出它的队列的所有属性。例如,子队列117A和117B保留队列117的全部属性,包括配额、安全性、事务类型、经验证的、私密度属性。
子队列可通过在队列ID中存入新的(或否则不是当前使用的)下标值。因而,不需要独立的队列创建机制来创建子队列。例如,新的子队列可通过调用包括新下标值的MessageMove应用程序接口(“API”)创建。当新的下标值被复制成唯一ID时,新的子队列在逻辑上被创建,且结果相应的消息在逻辑上被存储在子队列中。当没有消息包含先前使用的下标值时(即,当先前占据子队列的所有消息被移到其它子队列或已由接收应用程序消耗时),子队列在逻辑上被删除。
图2示出用于划分队列内的排队消息的方法的示例流程图。方法200将参照图1A中的组件和消息进行描述。
方法200包括从发送应用程序接收消息的动作,所述消息用于传递给接收应用程序(动作201)。例如,队列管理器118可接收来自队列管理器108的消息122。该消息可包括一队列标识符。例如,消息122包括队列ID123。队列标识符具有父值部分,它存储标识接收队列的父值。例如,队列ID 123包括标识接收队列117的父值124。
方法200包括基于所存储的父值将消息排入接收队列的动作(动作202)。例如,队列管理器118可将消息122排入接收队列117中。队列管理器118可基于父值124(例如通过应用程序102包括在消息中的URI)标识接收队列117。
方法200包括检查排队消息的动作(动作203)。检查排队消息可包括检查排队消息的内容,比如消息主体和/或消息标头。例如,应用程序112可检查(或窥视)内容127。基于所指定的管理员可配置的数据规则,可确定消息122可被划分或路由到相应子队列中。例如,如果消息122的检查展现消息122是有害消息,则消息122可移到有害消息子队列中(稍后可移回父队列)。或者,数据路由可用来将数据的各大部分拆分或划分到多个子队列中,每个子队列包含该较大部分数据的一个子集。例如,如果消息122的检查展现电话号码在000-0000~399-9999的范围内,则消息122可被路由到第一子队列;如果电话号码在400-0000~699-9999的范围内,则消息122可被路由到第二子队列;以及如果电话号码在700-0000~999-9999的范围内,则消息122可被路由到第三子队列。
方法200包括赋予标识接收队列的子队列的子队列下标值的动作(动作204)。例如,应用程序112可赋予下标值126,该下标值126与父值124一起标识子队列117A。应用程序112可基于消息检查的结果标识子队列。例如,基于消息122的检查,应用程序112可确定消息112要被路由到子队列117A。
因而,通常队列ID可用以下标注表示“父值;下标值”,其中父值标识队列而下标值标识所标识队列的子部分。父值可以是外部模块(例如应用程序122)用来标识队列(例如队列117)的URI。下标值可以是本地应用程序(例如应用程序112)用来标识父值的子部分的字符(例如Unicode字符)串。
队列的被标识子部分可以是子队列。例如,“父值124;下标值126”可本地地用来标识子队列117A。然而,队列的被标识子部分也可以是父队列。例如,“父队列124;下标值136”可用来本地地标识父队列117P。在一些实施例中,被保留的下标值(例如0)或空下标值(表示为“父队列124;”)用来本地地标识父队列。
方法200包括将子队列下标值存储在队列标识符的下标值部分的动作(动作205)。例如,应用程序112可将下标值126存储在队列ID 123中,从而重写下标值136。将新的下标值存储在消息中具有在逻辑上将消息从接收队列移到接收队列的被标识子队列的效果。例如将下标值126存入队列ID 123中具有在逻辑上将消息从父队列117P移到子队列117A的效果。
如前所述,队列标识符可以是具有固定长度的。应用程序112可被配置成这样使用下标值使得父值和相应下标值的组合(或串联)不超过该固定长度。因而,应用程序112可将消息中的下标值原地存储在消息(即当消息保持物理地包含在队列中时)。因此,应用程序112不必将消息物理地移出队列,以在逻辑上将该消息移到另一个子队列。结果,可执行存储、更新、重写下标值(并因而逻辑地在子队列之间移动消息)等,而无需产生发回队列管理器108的确认消息(“ACK”)。此外,因为Send API并不用来更新消息,所以当消息在各子队列之间移动时排队消息的原始发送者的标识得以保留。
图1A还示出物理地包含在接收队列117中的消息128、133和138、以及消息122。消息128包括具有父值124和下标值126的队列ID 129、以及内容137。消息133包括具有父值124和下标值136的队列ID 129、以及内容137。消息138包括具有父值124和下标值141的队列ID 139、以及内容142。消息122、128、133和138还可包括其它字段(例如消息ID字段)。然而为清晰起见,图1A中未示出其它字段。
逻辑拓扑191表示从应用程序112本地视角的队列的示例拓扑。逻辑拓扑191包括父队列117P(例如由“父值124;”标识)、子队列117A(由“父值124;下标值126”标识)、以及子队列117B(由“父值124;下标值141”标识)。因而,从应用程序112的角度,消息133包含在父队列117P中,消息122和128包含在子队列117A中,而消息138包含在子队列138中。然而,消息保持物理地存储在接收队列117中。
图1B和1C示出计算机系统111的其它视图。应用程序112可被配置成创建、访问队列句柄(例如队列句柄160和164),并将其发送给队列管理器118(例如通过对相应“API”的调用)。队列管理器118可使用队列句柄来在队列之间移动消息。为清晰起见,不明确示出消息122、123和138内的字段。然而,消息122、133和138保留在图1A中示出的字段。
图3示出用于在队列之间移动消息的方法的示例流程图。方法300将参照图1B和1C中的组件和消息来作描述。
方法300包括接收标识第一队列的第一句柄的动作(动作301)。第一句柄包括标识队列父部分的父值,以及标识队列第一子部分的第一下标值。例如,队列管理器118可接收句柄160和消息ID 161。句柄160包括父值124和标识子队列117A的下标值126。如前所述,队列父值124标识队列117,而下标值126标识子队列117A。消息ID 161可以是消息128的消息ID。当开始在队列管理器118上接收消息128时,应用程序112可访问并存储消息ID 161。
方法300包括使用第一句柄来定位第一队列内的消息的动作(动作302)。该消息包括队列标识符,该队列标识符具有存储父值的父值部分以及存储第一下标值的下标值部分。例如,队列管理器118可使用句柄160来定位子队列117A内的消息128。消息128包括具有父值124和下标值126的队列ID 129。
为了定位消息128,队列管理器118可从队列117中标识逻辑上存储在子队列117A中的消息子集。例如,队列管理器118可搜索包括下标值126的消息。然后,从被标识消息的子集中,队列管理器118可通过匹配来自句柄160的消息ID 161和消息128中所包含的消息ID 161来定位消息128。
方法300包括接收标识要接收已定位消息的第二队列的第二句柄的动作(动作303)。该第二句柄包括父值、以及标识该队列的第二子部分的第二下标值。例如,队列管理器118可接收标识子队列117B的句柄164。句柄164包括父值124和下标值141。
方法300包括将第二下标值存储在队列标识符的下标值部分,以便于在逻辑上将消息从第一队列移到第二队列(动作304)。例如,队列管理器118可将下标值141合适地存储在队列ID 129中。图1C示出存储在子队列117B中的消息128。在子队列之间移动消息不改变队列117中消息的顺序。
如前所述,应用程序可调用队列管理器API来在子队列之间移动消息。以下是移动API的一个示例HRESULT APIENTRY MQMoveMessage(QUEUEHANDLE hQueueFrom,ULONGLONG ulLookupId,QUEUEHANDLE hQueueTo,ITransaction*pTransaction,);使用该示例移动API,hQueueFrom值表示包含消息的队列的句柄(输入值)、ulLookupId值表示先前在事务中接收的消息的LookupId(输入值),hQueueTo值表示在Commit(提交)或Receive(接收)之后将包含消息的队列的句柄。队列可相关为同一父队列的子队列,或者可以是父队列本身。pTransaction值表示指向事务对象或常数的指针。事务对象可从消息排队的内部获取,从分布式事务协调程序的外部获取,或从当前环境中隐式地获取。示例移动API可在例如应用程序决定不立即处理消息并想要将消息移到另一个本地队列用于后续处理时调用。
应用程序还可使用其它API来获取队列信息。例如,应用程序可调用返回子队列信息的get into(进入)API,这些子队列信息诸如队列中子队列的数量和子队列名称的数组。这种信息可由应用程序在创建信息并在各子队列之间移动信息时使用。
因而,本发明的各个实施例通过改变队列ID的下标值便于在队列之间移动消息。因此,消息可以资源有效方式在各子队列之间移动,无需消息真正离开并重新进入消息传送系统。结果,可保留原始发送者的标识。此外,当消息保留在消息传送系统内时,传递确认不会在消息在队列之间移动时发回原始发送者。因而,原始发送者不会潜在地在消息实际上在队列之间传送时给出,指示消息已被传递给了接收应用程序的不正确信息。
参照图4,实现本发明的示例性系统具有计算机系统420形式的通用计算设备,包括处理单元421、系统存储器422以及把包括系统存储器422在内的各种系统组件耦合到处理单元421的系统总线423。处理单元421可执行被设计成实现包括本发明特征的计算机系统420特征的计算机可执行指令。系统总线423可能是若干总线结构类型中的任何一种,包括存储器总线或存储器控制器、外围总线、以及使用多种总线架构的任一种的本地总线。系统存储器包括只读存储器(“ROM”)424和随机存储器(“RAM”)425。含有帮助在个人计算机420中元件之间,如启动期间的信息交换的基本例程的基本输入/输出系统(“BIOS”)426存储在ROM 424中。
计算机系统420还包括读取和写入磁性硬盘439的硬盘驱动器427、读取或写入可移动磁盘429的磁盘驱动器428、和读取或写入诸如CD ROM或其它光学介质等可移动光盘431的光盘驱动器430。磁性硬盘驱动器427、磁盘驱动器428、光盘驱动器430分别通过硬盘驱动器接口432、磁盘驱动器接口433、光盘驱动器接口434连接至系统总线423。诸驱动器及其相关联计算机可读介质为计算机420提供计算机可执行指令、数据结构、程序模块和其它数据的非易失性储存。尽管在此所述示例性环境采用了磁性硬盘439、可移动磁盘429和可移动光盘431,但可使用其它类型计算机可访问的能够存储数据的计算机可读介质,包括磁卡、闪存卡、数字通用盘、Bernoulli卡、RAM、ROM等等。
包括操作系统435、一个或多个应用程序436、其它程序模块437和程序数据438的一个或多个程序模块的程序代码装置,可以存储在硬盘439、磁盘429、光盘431、ROM 424或RAM 425中。用户可通过诸如键盘440、定位装置442或诸如话筒、游戏杆、游戏垫、扫描仪等等的其它输入装置(未示出)向计算机系统420输入命令和信息。这些和其它输入装置常常通过与系统总线423耦合的输入/输出接口446连接到处理单元421。输入/输出接口446逻辑上表示各种不同接口的任一种,诸如串行端口、PS/2接口、并行端口、通用串行总线(“USB”)或一电气和电子工程师协会(“IEEE”)1394接口(即FireWire接口),或者甚至可在逻辑上表示不同接口的组合。
监视器447或其它显示装置也通过视频接口448和系统总线423相连。其它外围输出装置(未示出),如扬声器和打印机,也可连接到计算机系统420。
计算机系统420可与诸如办公室范围或企业范围的计算机网络、家庭网络、内联网、和/或因特网的网络相连。计算机系统420可与这些网络上诸如远程计算机系统、远程应用程序、和/或远程数据库的外部源交换数据。
计算机系统420包括网络接口453,通过它计算机系统420可从外部源接收数据和/或向外部源传送数据。如图4所示,网络接口453便于通过链接451与远程计算机系统483交换数据。网络接口453可逻辑地表示一个或多个软件和/或硬件模块,诸如网络接口卡和相应的网络驱动器接口规范(“NDIS”)堆栈。链接451表示网络的一部分(例如以太网分段),而远程计算机系统483表示网络的节点。
类似地,计算机系统420包括输入/输出接口446,通过它计算机系统420可从外部源接收数据和/或向外部源传送数据。输入/输出接口446通过数据链接459与调制解调器454(例如标准调制解调器、电缆调制解调器、或数字预订线路(“DSL”)调制解调器)耦合,通过该链接计算机系统420可从外部源接收数据和/或向外部源传送数据。如图4所示,输入/输出接口446便于通过链接452与远程计算机系统493交换数据。链接452表示网络的一部分,而远程计算机系统493表示网络的节点。
尽管图4示出本发明的适当操作环境,但可在任何能够实现本发明原理的系统(如必要作适当修改)中采用本发明原理。图4所示的环境仅是说明性的,而决不表示其中可实现本发明原理的各种各样环境的甚至一小部分。
根据本发明,可在与计算机系统420相关联的任一种计算机可读介质中存储包括应用程序、队列管理器、传输队列、接收队列的模块,以及包括应用程序消息、队列标识符、父值、下标值、内容和消息ID的关联数据,并对它们作访问。例如,这些模块的各个部分和相关联程序数据的各个部分可被包括在操作系统435、应用程序436、程序模块437和/或程序数据438中,用于存储在系统存储器422中。
当比如磁性硬盘439的大容量存储设备与计算机系统420相耦合时,这些模块和关联程序数据还可存储在大容量存储设备中。在网络化环境中,所示与计算机系统420相关的程序模块或其一部分可被存储在远程存储器存储设备中,诸如与远程计算机系统483和/或远程计算机系统493相关联的系统存储器和/或大容量存储设备。执行这些模块可在如前所述的分布式环境中进行。
本发明可体现为其它特定形式,而不背离其精神或本质特征。所述诸实施例在所有方面都应仅仅被视为是说明性的,而不是限制性的。因此,本发明的范围由所附权利要求书而不是前面的说明书来指出。在权利要求书的等效技术方案的含义和范围内的所有变化被包含在其范围内。
权利要求
1.在可与一个或多个其它计算机系统一起网络连接到网络的计算机系统上,所述计算机系统包括控制所述计算机系统上一个或多个消息队列的队列管理器,一种用于有效划分队列内排队的消息的方法,所述方法包括所述队列管理器从发送应用程序接收消息的动作,所述消息用于传递给接收应用程序,所述消息包括队列标识符,所述队列标识符具有存储标识接收队列的父值的父值部分;所述队列管理器基于所存储的父值将所述消息排入所述接收队列的动作;所述接收应用程序检查所述入队消息的动作;赋予子队列下标值的动作,所述子队列下标值标识所述接收队列的子队列;将所述子队列下标值存储在所述队列标识符的下标值部分中,从而根据所述消息检查在逻辑上将所述消息从接收队列移到接收队列的被标识子队列中的动作。
2.如权利要求1所述的方法,其特征在于,所述队列管理器基于所存储的父值将所述消息排入所述接收队列的动作包括,基于包括标识接收队列的URI的消息将所述消息排入所述接收队列的动作。
3.如权利要求1所述的方法,其特征在于,所述接收应用程序检查排队消息的动作包括,将可配置数据规则应用于所述消息以确定要如何处理所述消息的动作。
4.如权利要求1所述的方法,其特征在于,访问标识所述接收队列的子队列的子队列下标值的动作包括访问一个或多个字符的字符串的动作。
5.如权利要求1所述的方法,其特征在于,将所述子队列下标值存储在队列标识符的下标值部分中的动作包括,基于所述消息的内容将所述消息路由给子队列的动作。
6.如权利要求1所述的方法,其特征在于,将所述子队列下标值存储在队列标识符的下标值部分中的动作包括,将所述下标值原地存储在队列标识符中,从而防止产生返回确认的动作。
7.如权利要求1所述的方法,其特征在于,存储队列标识符的下标值部分的动作包括,将所述下标值原地存储在队列标识符中,从而保留所述发送应用程序的标识的动作。
8.在可与一个或多个其它计算机系统一起网络连接到网络的计算机系统上,所述计算机系统包括控制所述计算机系统上一个或多个消息队列的队列管理器,一种用于在各队列之间移动消息的方法,所述方法包括接收标识第一队列的第一句柄的动作,所述第一句柄包括标识队列的父部分的父值,以及标识队列的第一子部分的第一下标值;使用所述第一句柄定位所述第一队列内的消息的动作,所述消息包括一队列标识符,它具有存储父值的父值部分以及存储所述第一下标值的下标值部分。接收第二句柄的动作,所述第二句柄标识要接收定位消息的第二队列,所述第二句柄包括父值,以及标识所述队列的第二子部分的第二下标值;以及将第二下标值存储在所述队列标识符的下标值部分中,以便于在逻辑上将消息从第一队列移到第二队列的动作。
9.如权利要求8所述的方法,其特征在于,接收标识第一队列的第一句柄的动作包括接收标识父队列的第一句柄的动作。
10.如权利要求9所述的方法,其特征在于,接收标识父队列的所述第一句柄的动作包括接收具有空下标值的第一句柄的动作。
11.如权利要求8所述的方法,其特征在于,接收标识第一队列的第一句柄的动作包括接收标识所述第一队列的子队列的第一句柄的动作。
12.如权利要求8所述的方法,其特征在于,使用所述第一句柄来定位所述第一队列内消息的动作包括,标识排在所述第一队列内的下标值等于所述第一下标值的消息的动作。
13.如权利要求8所述的方法,其特征在于,接收标识第二队列的第二句柄的动作包括,接收标识父队列的第二句柄的动作。
14.如权利要求13所述的方法,其特征在于,接收标识父队列的第二句柄的动作包括,接收具有空下标值的第二句柄的动作。
15.如权利要求8所述的方法,其特征在于,接收标识第二队列的第二句柄的动作包括接收标识所述第一队列的子队列的第一句柄的动作。
16.如权利要求8所述的方法,其特征在于,将所述第二下标值存储在所述队列标识符的下标值部分,以便于在逻辑上将消息从所述第一队列移到所述第二队列的动作包括,在逻辑上将所述消息从所述第一队列的一个子队列移到所述第一队列的另一个子队列的动作。
17.如权利要求8所述的方法,其特征在于,将所述第二下标值存储在所述队列标识符的下标值部分,以便于在逻辑上将消息从所述第一队列移到所述第二队列的动作包括,在逻辑上将所述消息从所述第一队列的一个子队列移到相应父队列的动作。
18.如权利要求8所述的方法,其特征在于,将所述第二下标值存储在所述队列标识符的下标值部分,以便于在逻辑上将消息从所述第一队列移到所述第二队列的动作包括,在逻辑上将所述消息从父队列移到所述第一队列的相应子队列的动作。
19.一种或多种具有存储于其上的表示电子消息的数据结构的计算机可读介质,所述数据结构包括内容字段,存储表示所述电子消息的内容的内容值;以及队列标识符字段,存储标识队列的队列标识符值,其中要将所述内容字段中表示的电子消息的内容入队,所述队列标识符字段包括父值字段,存储标识所述队列父部分的父值;以及下标值字段,存储标识所述队列子部分的下标值。
20.如权利要求19所述的一种或多种具有存储于其上的表示电子消息的数据结构的计算机可读介质,其特征在于,存储标识所述队列子部分的下标值的下标值字段包括存储标识所述队列的子队列的一个或多个字符的字符串。
全文摘要
本发明涉及使用子队列来增强本地消息处理的方法、系统、以及计算机程序产品。消息包括由父部分和下标部分组成的队列ID。父部分标识父值而下标部分标识父队列的子队列。消息通过改变下标值在逻辑上在队列之间移动,例如在子队列之间、在父队列和子队列之间、以及在子队列和父队列之间。应用程序可检查各消息,并基于消息内容(包括消息主体和标头)将各消息路由到指定子队列中。下标值可原地改变(例如当消息保持物理地存储在队列中时),以便于保留消息发送者标识并避免过早确认传递(即不产生返回ACK)。
文档编号G06F17/30GK1842075SQ200610051548
公开日2006年10月4日 申请日期2006年2月28日 优先权日2005年3月28日
发明者A·达迪欧莫弗, R·D·希尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1