CN1971521A - 用于保留消息顺序的系统和方法 - Google Patents
用于保留消息顺序的系统和方法 Download PDFInfo
- Publication number
- CN1971521A CN1971521A CNA2006101063022A CN200610106302A CN1971521A CN 1971521 A CN1971521 A CN 1971521A CN A2006101063022 A CNA2006101063022 A CN A2006101063022A CN 200610106302 A CN200610106302 A CN 200610106302A CN 1971521 A CN1971521 A CN 1971521A
- Authority
- CN
- China
- Prior art keywords
- message
- consumer
- notice
- producer
- entity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Human Resources & Organizations (AREA)
- Operations Research (AREA)
- Economics (AREA)
- Marketing (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
一种用于保留与消息相关联的顺序的系统,用于这样的环境中,其中消息包括相关联的顺序标识符;接收机可操作为接收与第一顺序标识符相关联的第一消息,并且选择组件可操作为选择用于处理该第一消息的第一实体。该系统包括:确定组件,其用于确定是否已经由接收机接收到与完成对第一消息的处理相关联的通知;以及控制器,其用于响应于接收到该通知与由对该通知进行接收的接收机接收到与第一标识符相关联的第二消息的组合,控制选择组件选择用于处理该第二消息的第二实体。
Description
技术领域
本发明涉及一种用于保留消息顺序的系统和方法。
背景技术
参考图1,在诸如WebSphere MQ(WebSphere是国际商业机器(IBM)公司的注册商标)之类的异步消息传递系统(100)中,发送应用(在此用术语“生产者(producer)”(105)表示)向接收应用(在此用术语“消费者(consumer)”(110)表示)的队列(115)发送一个消息用于处理。
当使用异步消息传递系统时,经常需要按顺序来处理来自一个生产者的消息。通常,生产者假设顺序将会被保留,并且生产者都是围绕着这一假设设计出来的。例如,如果一组消息代表对数据库进行的插入、更新、删除等,那么如果不按顺序对这些消息进行处理,则后果将是灾难性的。如果以错误的顺序处理了一个后接“删除一行”操作的“插入一行”操作(即在处理该“插入”操作之前处理了该“删除”操作),则结果将会使本应被删除的行仍保持已插入状态。也就是说,如果必须由消费者以多个异步消息的到达顺序对这多个异步消息进行处理,那么如果消息m1和消息m2依次到达,则消费者必须首先处理消息m1;只有对消息m1的处理完成了,才能进行对消息m2的处理。
生产者必然会在消息产生时给消息排序,并且为了保留这一顺序,最常见的解决方案是将生产者配置为将其所有消息发送到与单个消费者相关联的队列中。该单个消费者按照消息被置入该队列的顺序来处理来自该队列的所有消息。
遗憾的是,这些消息的消费者变成了单个的故障点。此外,由于只使用单个消费者,系统是不能扩展的。此外,由于只使用单个消费者,这一解决方案还限制了建立可以支持不同数目消费者的动态且灵活的消息传递体系结构的能力。
有利地,多个消费者可以有助于负载平衡要求,可以被用来绕过故障消费者而路由等等。
因此,在一些异步消息传递系统中,为了可扩展性,多个消费者可以处理来自共享队列的消息。与异步消息传递系统相关联的问题是,在多个消费者竞争来自共享队列的消息时,异步消息传递系统不能保证消息的处理顺序。参考图2中的异步消息传递系统(200),如果两个消费者(210,220)监听单个队列(215),则一个消费者可能比另一个消费者更快地处理消息。
例如,如果消费者1(210)的执行速度是消费者2(220)的速度的一半,则消费者1(210)处理某些消息所用的时间是消费者2(220)所用时间的两倍。此外,典型地,消费者1不知道消费者2的存在。因此,如果消费者2(220)取回并处理消息m1,消费者1(210)取回m2,消费者2(220)在消费者1(210)完成其对m2的处理之前取回并处理消息m3,则序列m1、m2、m3实际上是按照顺序m1、m3、m2被处理的。
在一种现有技术解决方案——由IBM公司提供的IPCOM000020233D“A Method for Scalable,Ordered Message Processing”(2003年11月4日上载到IP.com)中,公开了一种当多个消费者处理来自一个共享队列的消息时可以使用的系统。在该现有技术中,特定种类的消息标有全球唯一序列号(GUS)(例如由生产者、过滤应用等来标记)。多个消费者必须可以访问存储与已处理的最后消息相关联的数据(例如GUS、消息有效载荷)的第一关系数据库以及存储与不按顺序的消息相关联的数据(例如GUS)的第二关系数据库。因此,如果消息m1、m2和m3以m1、m3和m2的顺序到达,则m1首先被处理并且被插入到第一关系数据库中。当接收到m3时,对第一关系数据库的询问确定m3是不按顺序的并且因此在接收到m2之前将m3插入到第二关系数据库中。当接收到m2时,执行对第一关系数据库的询问以确定已经处理了m1。因此,随后可以处理m2和m3。然后,对第一关系数据库进行更新,以反映已经处理了m2和m3。
这种现有技术解决方案允许消息在传送中不按顺序,并且随后通过使用GUS和关系数据库来重建顺序。然而,需要存储消息有效载荷,这引起了开销。还需要消费者共享对关系数据库的访问,这可能会引起开销并降低可扩展性,原因是能够共享对关系数据库的访问的消费者的数目是有限制的。
在一些异步消息传递系统中,多个消费者是“成串的”,其中每个消费者均具有相关联的队列。为了保留消息排序,一些系统典型地提供一种特征,其中生产者可以选择消费者的单个实例以向其发送消息。然而,如果经由不同的成串的消费者的链来发送该消息,则要么就牺牲消息排序需求(即允许后面的消息超过前面的消息以便该链中的每个消费者可以被动态地选择用于每个消息),要么就牺牲建立动态且灵活的消息传递体系结构的能力(即其中每个组件明确地规定必须将消息发往的下一个组件)。
发明内容
根据第一个方面,提供一种用于保留与消息相关联的顺序的系统,用于这样的环境中,即其中:消息包括相关联的顺序标识符;接收机可操作为接收与第一顺序标识符相关联的第一消息;以及选择组件可操作为选择用于处理所述第一消息的第一实体;该系统包括:确定组件,其用于确定是否已经由接收机接收到与完成对第一消息的处理相关联的通知;以及控制器,其用于响应于接收到该通知与由对该通知进行接收的接收机接收到与第一标识符相关联的第二消息的组合,控制选择组件选择用于处理第二消息的第二实体。
有利地,保留消息顺序,并且此外消息不会由于消息的发送而打乱顺序。有利地,可以选择不同的消费者来处理与顺序相关联的消息(如果已经接收到与所有已被发往单个消费者的待处理消息相关联的确认)。这使得可以建立灵活的体系结构(例如,以绕过故障消费者而进行路由等)。
优选地,该系统包括记录组件,其用于将与消息相关联的数据以及与实体相关联的数据记录在存储组件中。更优选地,该存储组件是持久性的。作为替代,该存储组件不是持久性的。更优选地,响应于接收到通知而清除存储组件中的数据。
在一个优选的实施方式中,第一实体可操作为将第一消息转发给第三实体用于处理,并可操作为记录与第一消息相关联的数据以及与第三实体相关联的数据。优选地,第一实体可操作为响应于从第三实体接收到与完成对第一消息的处理相关联的另一通知,生成通知。更优选地,该系统还包括用于生成顺序标识符的生成器。
优选地,通知与完成对多个消息的处理相关联。更优选地,根据与系统相关联的参数来发送通知。更优选地,通知是非持久性的。
在一个优选的实施方式中,控制器可操作为响应于由接收机在接收到通知之前接收到与第一标识符相关联的第三消息,控制选择组件选择用于处理第三消息的第一实体。
根据第二个方面,提供一种用于保留与消息相关联的顺序的方法,用于这样的环境中,即其中:消息包括相关联的顺序标识符;接收机可操作为接收与第一顺序标识符相关联的第一消息;以及选择组件可操作为选择用于处理第一消息的第一实体;该方法包括步骤:确定是否已经由接收机接收到与完成对第一消息的处理相关联的通知;以及响应于接收到该通知与由对该通知进行接收的接收机接收到与第一标识符相关联的第二消息的组合,控制选择组件选择用于处理第二消息的第二实体。
根据第三个方面,提供一种计算机程序,其包括当该程序运行于计算机上时适用于执行上述方法的所有步骤的程序代码装置。
附图说明
现在将参考如附图所示的本发明的优选的实施方式,仅作为例子来描述本发明:
图1是一个生产者和单个消费者实例的框图;
图2是一个生产者和多个消费者实例的框图;
图3是一个生产者和多个消费者实例的更详细的框图;
图4是示出由生产者所执行的处理中包括的操作步骤的流程图;
图5是一个生产者、多个中间件实例和多个消费者实例的框图;
图6是示出由中间件所执行的处理中包括的操作步骤的流程图;
图7示出了生产者日志的表示;
图8示出了生产者日志的表示;以及
图9示出了中间件日志的表示。
具体实施方式
现在将参考图3和图4来描述第一个实施方式。在第一个例子中,在图4中,优选地,步骤400至步骤450由与在此称作“生产者(305)”的生产者(305)相关联的主线程来执行。优选地,步骤455至步骤480由与该生产者(305)并行执行的并行生产者线程来执行。在图3中,示出了一个包括生产者(305)的异步消息传递系统(300),生产者(305)生成(步骤400)至少一个消息(例如响应于一个事件)。在第一个例子中,消息与对数据库的行的数据库操作相关联(例如,“插入”、“更新”、“删除”等)。优选地,为由生产者的单个实例生成的消息保留消息顺序。
系统(300)还包括在相应的多个系统中成串的多个消费者,即,具有相关联队列(315)的消费者1(310)和具有相关联队列(325)的消费者2(320)。将消费者的单独安装(individual installation)称作实例(即,消费者1是一个实例,并且消费者2是一个实例)。在第一个实施方式中,每个消费者实例处理一个消息,而不将该消息转发给另一个消费者等等。
典型地,一个异步消息传递应用在与生产者和消费者的每个实例相同的系统上执行。
在第一个实施方式中,生产者(305)为每个消息标记(步骤405)一个序列标识符和一个序列号(其中序列号在由序列标识符标识的序列中是唯一的并且其中该序列号的值随着时间而增大)。在一个例子中,序列标识符针对生产者是唯一的(例如,其中序列标识符针对任务是唯一的),从而多于一个生产者不能生成具有相同序列标识符的消息。在另一个例子中,序列标识符可以针对生产者唯一并且还可以针对消费者唯一,从而多于一个消费者不能接收具有相同序列标识符的消息。
在第一个例子中,每个数据库行具有一个相关联的序列标识符,并且生产者(305)生成两个消息。因此,就可以将排序需求表述如下:对于第一个消息s1m1(其中“s1”是序列标识符;“m1”是序列号;并且“插入第1行”是消息有效载荷)以及第二个消息s1m2(其中“s1”是序列标识符;“m2”是序列号;并且“更新第1行”是消息有效载荷),必须在处理s1m2之前处理s1m1,原因是s1m1的序列号小于s1m2的序列号。
生成适当的序列标识符和序列号的任务可以由消息传递应用或由生产者和消息传递应用的组合来执行。在后一种实施方式中,生产者可以规定非唯一的序列标识符(例如,消费者ID--其中多于一个生产者利用该消费者ID),并且随后消息传递应用可以限定该序列标识符,以便该序列标识符针对生产者是唯一的。在另一个实施方式中,多个生产者可以共同协作来确定针对每个生产者而唯一的序列标识符。
生产者(305)包括选择组件,其用于选择一个消费者实例以便向其发送第一个消息s1m1用于处理。作为替代,消息传递应用可以基于负载平衡技术、可用性需求等来选择消费者实例。
在第一个例子中,生产者(305)选择了消费者1(310)并将s1m1发送(步骤410)到与消费者1(310)相关联的队列(315)。生产者(305)在日志中记录(步骤415)与s1m1相关联的消息数据。
在第一个例子中,记录了序列标识符(即s1)和已发送的最新消息的序列号(即m1)。作为替代,除此之外,还可以记录消息有效载荷。生产者(305)还记录(步骤415)与消费者1(310)相关联的消费者数据(即与消费者1相关联的标识符,在第一个例子中,该标识符为“C1”)。在图7的表1中示出了该日志的表示。
优选地,与生产者相关联的日志不是持久性的(即被写入到磁盘),原因是不需要在不同的生产者实例之间保留消息顺序。例如,序列标识符将针对一个生产者实例而唯一。因此,如果一个生产者实例完成(例如,正常地结束或崩溃),则在重新开始的基础上,执行新的生产者实例。由于不需要在不同的生产者实例之间保留消息顺序,因此新的生产者实例使用相对于由先前的生产者实例所用的序列标识符是新的序列标识符,并且生产者实例不需要保留任何跨生产者实例的数据。与先前的生产者实例相关联的消息仍将被处理。
作为替代,与生产者相关联的日志可以是持久性的(即被写入磁盘),以便生产者能够在故障后恢复。这使得生产者可以继续,而不会丢失先后顺序。如果生产者是响应于外部事件而生成消息的,则生产者可以采用这种技术。
接着,与生产者(305)相关联的并行生产者线程等待(步骤455)来自消费者1(310)的s1m1已经被处理的确认。在第一个例子中,对具有特定序列号y的消息的确认同样用于确认每个具有序列号y或更小的消息。
应当理解,并行生产者线程可以连续地并行执行,或者可以当接收到确认时被调用。
在第一个例子中,在并行生产者线程等待来自消费者1(310)的s1m1已经被处理的确认的同时,生产者(305)确定(步骤425)是否存在具有与第一个消息相匹配的序列标识符的任何其他的有待发送用于处理的消息。响应于确定没有其他的有待发送用于处理的消息,并行生产者线程继续等待(步骤455)来自消费者1(310)的s1m1已经被处理的确认。
在第一个例子中,生产者(305)确定还有另一个消息(即第二个消息s1m2)有待发送用于处理。因此,响应于确定存在其他的有待发送用于处理的消息,生产者(305)确定与该另一个消息相关联的序列标识符(即s1)。生产者(305)使用该序列标识符来检查其日志(步骤430),以便确定(步骤435)是否存在具有匹配序列标识符的记录。响应于确定没有具有匹配序列标识符的记录,该生产者将该另一个消息发送(步骤410)给消费者。
在第一个例子中,生产者(305)确定存在具有匹配序列标识符的记录(即表1中的具有序列标识符“s1”的记录),并且因此,响应于确定存在具有匹配序列标识符的记录,生产者(305)确定(步骤440)相关联的消费者数据(即“C1”)。注意,生产者(305)确定日志中存在具有匹配序列标识符的日志记录,原因是由于并行生产者线程正在等待来自消费者1(310)的s1m1已经被处理的确认,因此还没有清除日志记录。
然后,生产者(305)将s1m2发送(步骤445)到与该确定的消费者数据相关联的消费者队列(即与消费者1(310)相关联的队列(315))。应当注意,消费者1(310)是处理第一个消息s1m1的同一个消费者实例,其中s1m1具有与第二个消息s1m2相同的序列标识符。生产者(305)记录(步骤450)与s1m2相关联的消息数据。在第一个例子中,表1中所表示的序列标识符字段中的数据(即s1)保持相同;由于m2是已发送的最新消息的序列号,因此序列号字段中的数据被覆盖(即m1被m2覆盖)并且表1中所表示的消费者标识符字段中的数据(即C1)保持相同。
图7的表2中示出了已更新的生产者日志的表示。
响应于记录(步骤450)数据,生产者(305)确定(步骤425)是否存在具有与第一个消息相匹配的序列标识符的任何其他的有待发送用于处理的消息。在第一个例子中,生产者(305)确定没有另外的消息有待发送用于处理,并且并行生产者线程继续等待(步骤455)来自消费者1(310)的s1m1和s1m2已经被处理的确认。
在第一个例子中,消费者1(310)处理s1m1,并且随后处理s1m2(其中处理顺序由消息到达队列(315)的顺序来确定)。在s1m2已经被处理之后,消费者1(310)生成并发送一个确认到并行生产者线程,以确认s1m2已经被处理。由于在第一个例子中,对具有特定序列号的消息的确认同时用于确认每个具有较低序列号的消息,因此该确认还确认s1m1已经被处理。
应当理解,作为替代,消息传递应用可以代表消费者实例生成并发送确认。
并行生产者线程对是否已经接收到任何确认进行确定(步骤460)。如果没有接收到任何确认,则例如生成器生成(步骤470)报警,以便系统管理者能够执行分析(例如,系统管理者可以强制清除有关与序列标识符相关联的待处理(outstanding)消息的日志记录)。
在第一个例子中,并行生产者线程确定(步骤460)已经接收到了确认(例如,其中并行生产者线程可以在一段预定的时间内等待确认)。
响应于接收到了确认,并行生产者线程检查(步骤465)日志以便确定(步骤475)生产者(305)是否能够“忘记”有关与序列标识符相关联的待处理消息的日志记录。也就是说,并行生产者线程将该确认中的序列标识符以及相关联的序列号与日志记录中的序列标识符数据以及相关联的序列号数据进行比较。
如果还没有接收到关于每个与已被发送的特定序列标识符相关联的待处理消息的确认,则生成器生成(步骤470)报警。
如果已经接收到关于每个与已被发送的特定序列标识符相关联的待处理消息的确认,则并行生产者线程清除(步骤480)与已被处理的消息的序列标识符相关联的日志记录(即表2中的与s1m2相关联(并因此与s1m1相关联)的日志记录)。
在第一个例子中,将关于s1m2(并因此s1m1)的确认与日志(如表2中所表示的)进行比较。该确认的序列标识符与该日志记录中的序列标识符数据相匹配。该确认的序列号与该日志记录的最新序列号数据相匹配,并且因此,由于该确认还确认对每个具有小于m2中的“2”的序列号的消息的处理,因此该确认还确认对m1的处理(即其中m1具有序列号1,其小于2)。
因此,并行生产者线程清除(步骤480)与已被处理的消息的序列标识符相关联的日志记录(即表2中的与s1m2相关联(并因此与s1m1相关联)的日志记录)。
应当理解,将序列标识符和序列号分配给消息使得可以识别与该消息相关联的确认(即通过将消息中的序列标识符和序列号与确认中的序列标识符和序列号相比较)。应当理解,由于单个消费者以在单个消费者队列上接收到消息的顺序来处理消息,因此消费者在其对消息的处理中确保了顺序。
接着,生产者(305)生成(步骤400)第三个消息,并为该消息标记(步骤405)一个序列标识符和一个序列号(在第一个例子中为s1m3)。生产者(305)选择一个消费者实例以便向其发送第三个消息s1m3用于处理。在第一个例子中,生产者(305)选择了消费者2(320),并将s1m3发送(步骤410)到与消费者2(320)相关联的队列(325)。生产者(305)记录(步骤415)与s1m3相关联的消息数据——在第一个例子中,记录已发送的最新消息的序列号(即m3)和序列标识符(即s1)。生产者(305)还记录(步骤415)与消费者2(320)相关联的消费者数据(即与消费者2相关联的标识符——在第一个例子中,该标识符为“C2”)。在图7的表3中示出了该生产者日志的表示。
接着,并行生产者线程等待(步骤455)来自消费者2(320)的s1m3已经被处理的确认。在第一个例子中,在并行生产者线程等待来自消费者2(320)的s1m3已经被处理的确认的同时,生产者(305)确定是否存在具有与该第三消息相匹配的序列标识符的任何其他的消息有待发送用于处理。在第一个例子中,由于没有任何其他的消息有待发送用于处理,如上所述,并行生产者线程继续等待(步骤455)来自消费者2(320)的s1m3已经被处理的确认。
在第一个例子中,消费者2(320)处理s1m3,并且生成并发送一个确认给并行生产者线程,以确认s1m3已经被处理。
并行生产者线程对是否已经接收到任何确认进行确定(步骤460)。如果没有接收到任何确认,生成器生成(步骤470)报警。
在第一个例子中,并行生产者线程确定(步骤460)已经接收到了确认。响应于接收到了确认,如上所述,并行生产者线程检查(步骤465)日志以便确定(步骤475)生产者(305)是否能够“忘记”有关与序列标识符相关联的待处理消息的日志记录。
在第一个例子中,将关于s1m3的确认与日志(如表3中所表示的)进行比较。该确认的序列标识符与该日志记录中的序列标识符数据相匹配。该确认的序列号与该日志记录的最新序列号数据相匹配。因此,并行生产者线程清除(步骤480)与已被处理的消息的序列标识符相关联的日志记录(即表3中的与s1m3相关联的日志记录)。
因此,生产者可配置为将具有同一序列标识符的所有系统中待处理消息发送给同一消费者实例。这使得可以在序列中保留顺序,原因是单个消费者以消息到达其相关联队列的顺序来处理消息。
此外,只有当已经接收到关于每个已发送给同一消费者实例(即C1)的具有同一序列标识符(即s1)的待处理消息(即m1,m2)的确认,生产者(305)才能“忘记”其已经针对任意给定序列选择了消费者。然后,生产者(305)可以在下一次看到该序列(即s1)中的消息(即m3)时选择一个新的消费者实例(即C2)。应当理解,如果在接收到关于每个待处理消息的所有确认之前生产者实例发生故障,则仍然可以处理待处理消息,但是将不会给生产者实例发回确认(因为在重新开始之后,生产者实例是一个新的生产者实例)。
因此,对于系统中每个具有待处理消息的序列标识符,建立从生产者到消费者的路由,当消息在系统中待处理的时候重新使用该路由,但是当该序列中的消息不再被处理时破坏掉该路由(并且可能稍后重建)。
因此,当特定的序列不具有任何待处理消息时,优选的实施方式使得可以建立新的路由。有利地,优选的实施方式使得可以在系统中绕过故障消费者进行路由,并且有助于保持较高的可用性。此外,如果一个消费者发生故障,则只有那些与该故障消费者在发生故障时正在处理的序列标识符相关联的消息将继续路由到故障消费者(除非例如,系统管理者干预并且强制清除有关与序列标识符相关联的待处理消息的日志记录)。与另一个序列标识符相关联的消息可以安全地绕过故障而被路由,而不会危及消息顺序的需求。
有利地,一旦当前消费者实例已经处理了迄今为止发送给它的消息就忘记序列的特征意味着生产者(305)不会建立序列标识符和相关消费者标识符的持续增加的日志。
应当理解,在优选的实施方式中,与特定序列标识符相关联的所有消息不必由同一消费者实例进行处理,但是它们应当以特定的顺序进行处理。也就是说,只有当与一个序列标识符相关联的先前的消息已经发送给该消费者实例但还没有被该消费者实例处理时,才会将消息发送给同一消费者实例。
应当理解,可以针对每个已处理的消息生成确认。然而,也可以对确认的生成和接收进行优化。如上所述,在一个例子中,针对s(x),m(y)的单个确认用于确认所有具有序列标识符x和序列号y或更小的消息。在另一个例子中,确认生成可以被这样跳过,从而每隔一个已处理的消息生成一个确认。在另一个例子中,确认生成可以被延迟(例如直到有更多带宽可用的时候)。在又一个例子中,可以根据从接收到一批消息中的第一个消息开始的超时发送针对一批消息的确认。在又一个例子中,消息传递应用可以配置为确定是否已经将与一个序列标识符相关联的另外消息路由给了一个消费者实例但是还没有进行处理。然后消息传递应用可以配置为在已经生成最后待处理消息的确认之前,丢弃针对具有等待消费者实例的待处理消息的序列标识符而生成的确认。作为替代,消息传递应用可以仅当已经处理完所有待处理消息时才调用消费者实例以生成确认。
通过避免针对每个已处理消息生成确认,尽管在已经接收到所有的适当确认之前,不能将与一个序列标识符相关联的其他消息发送给另外的消费者实例(并且因此,不能绕过故障消费者实例对其他消息进行路由),并且尽管当需要生成确认时消费者实例可能是不可用的,但是有利地,这种特征改善了性能并且最小化了与确认的生成和传送相关联的开销。
在另一个优化的例子中,确认可以是非持久性的消息。持久性的消息(消息传递系统保证不会丢失该消息)必须被写入磁盘并因此造成开销。此外,当处理持久性消息时需要额外的网络使用(例如,可能会需要将确认从接收该持久性消息的接收者发送到该持久性消息的发送者)。因此,如果丢失了与特定的序列标识符相关联的消息的确认,则仍将与该特定的序列相关联的另一(非待处理)消息发送给同一消费者实例等等,直到接收到适当的确认为止。这种优化特征可能不适于消息生成得较为稀少的序列,原因是在生成另一(非待处理)消息并接收到适当的确认之前可能会花费一些时间,因此,延迟了对与该序列标识符相关联的日志记录的清除。
现在将参照图4、图5和图6来描述第二个实施方式。在第二个例子中,在图6中,优选地,步骤600至步骤660由与在此称为“中间件1(510)”的中间件1(510)相关联的主线程来执行。优选地,步骤665至步骤695由与中间件1(510)并行执行的并行中间件线程来执行。
在图5中,示出了包括生产者(505)的异步消息传递系统(500),生产者(505)生成至少一个入站消息(例如,响应于一个事件)。在此术语“入站”指进入中间件。系统(500)还包括在相应的多个系统中成串的多个中间件,即,具有相关联队列(515)的中间件1(510)和具有相关联队列(525)的中间件2(520)。系统(500)还包括在相应的多个系统中成串的多个消费者,即具有相关联队列(535)的消费者1(530)和具有相关联队列(545)的消费者2(540)。将中间件或消费者的单独安装称作实例。
典型地,一种类型的中间件可以响应于一个入站消息生成一个或多个出站消息,其中术语“出站”在此指去往消费者。另一种类型的中间件可以转换来自生产者的入站消息并将转换后的消息发送给消费者。例如,将消息中的时间数据从英国夏天时间(BST)转换成格林威治标准时间(GMT)。另一种类型的中间件可以在不同的消费者之间路由入站消息。特别地,复杂的中间件可以执行所有这些操作。
在第二个例子中,中间件实例处理入站消息,并且作为响应,将多个出站消息引入消息传递网络,并且可以将这些出站消息路由到消费者。在第二个例子中,每个消费者实例处理一个或多个出站消息,而不将任何出站消息转发给另一消费者。
典型地,一个异步消息传递应用在与生产者、中间件和消费者的每个实例相同的系统上执行。
在第二个例子中,生产者(505)生成(步骤400)两个入站消息,其中这些入站消息与对数据库的行进行的数据库操作相关联(例如,“插入”、“更新”、“删除”等)。
生产者(505)为每个入站消息标记(步骤405)一个序列标识符和一个序列号(其中序列号在由序列标识符标识的队列中是唯一的并且其中该序列号的值随着时间而增大)。
在第二个例子中,每个数据库行具有一个相关联的序列标识符。因此,就可以将排序需求表述如下:对于第一个入站消息s1m1(其中“s1”是序列标识符;“m1”是序列号;并且“插入第1行”是消息有效载荷)以及第二个入站消息s1m2(其中“s1”是序列标识符;“m2”是序列号;并且“更新第1行”是消息有效载荷),必须在处理s1m2之前处理s1m1,原因是s1m1的序列号小于s1m2的序列号。
生产者(505)包括选择组件,其用于选择一个中间件实例以便向其发送第一个入站消息s1m1用于处理。作为替代,消息传递应用可以基于负载平衡技术、可用性需求等来选择中间件实例。
在第二个例子中,生产者(505)选择了中间件1(510)并将s1m1发送(步骤410)到与中间件1(510)相关联的队列(515)。生产者(505)在日志中记录(步骤415)与s1m1相关联的消息数据——在第二个例子中,记录已发送的最新入站消息的序列号(即m1)和序列标识符(即s1)。生产者(505)还记录(步骤415)与中间件1(510)相关联的中间件数据(即与中间件1相关联的标识符——在第二个例子中,该标识符为“I1”)。在图8的表4中示出了该日志的表示。
优选地,与生产者相关联的日志不是持久性的(即被写入到磁盘)。作为替代,与生产者相关联的日志可以是持久性的(即被写入到磁盘)。
与生产者(505)相关联的并行生产者线程等待(步骤455)来自中间件1(510)的s1m1已经被处理的确认。
参考图6,响应于接收到(步骤600)入站消息s1m1,中间件1(510)生成(步骤605)两个出站消息。中间件1(510)将该入站序列标识符与相关联的入站序列号映射到出站序列标识符和至少一个相关联的出站序列号。
在第二个例子中,中间件1(510)为每个出站消息标记(步骤610)与该入站序列标识符相关联的出站序列标识符。作为替代,该出站序列标识符可以与该入站序列标识符相同。中间件1(510)为每个出站消息标记(步骤610)与该入站序列号相关联的出站序列号。该出站序列号在由该出站序列标识符标识的序列中是唯一的,并且该出站序列号的值随着时间而增大。
在第二个例子中,针对第一入站消息s1m1,生成第一出站消息s10m1(其中“s10”是出站序列标识符;“m1”是出站序列号并且“到数据库A”是消息有效载荷)并且生成第二出站消息s10m2(其中“s10”是出站序列标识符;“m2”是出站序列号并且“插入第100行”是消息有效载荷)。必须在处理s10m2之前处理S10m1,原因是s10m1的出站序列号小于s10m2的出站序列号。
中间件1(510)包括选择组件,用于选择一个消费者实例以便向其发送第一和第二出站消息用于处理。作为替代,消息传递应用可以基于负载平衡技术、可用性需求等选择消费者实例。
在第二个例子中,中间件1(510)选择了消费者1(530)来处理出站消息(即s10m1和s10m2)并将s10m1和s10m2发送(步骤615)到与消费者1(530)相关联的队列(535)。
中间件1(510)强制性地在日志中记录(步骤620)与s1m1相关联的消息数据。在第二个例子中,中间件1(510)记录:第一入站消息的序列标识符(即s1);第一和第二出站消息的序列标识符(即s10);已发送的最新入站消息的入站序列号(即m1);与生成该第一入站消息的生产者相关联的生产者数据(例如,与生产者(505)相关联的标识符——在第二个例子中,该标识符为“P1”);已发送的最新出站消息的出站序列号(即m2)以及与对该出站消息进行处理的消费者相关联的消费者数据(例如,与消费者1(530)相关联的标识符——在第二个例子中,该标识符为“C1”)。图9的表5中示出了该日志的表示。
与中间件相关联的日志是持久性的(即被写入到磁盘),甚至跨中间件的各个实例。这是因为在发生故障的情况下,中间件需要确保消息能被处理并且消息能被按照正确的顺序进行处理。
例如,中间件将与特定序列标识符相关联的第一消息转发给选定的消费者,并且随后就崩溃。该消费者还没有处理该第一消息(并且因此该消费者没有发回确认)。该中间件得以恢复并随后接收到与该特定序列标识符相关联的第二消息。由于该消费者还没有确认对该第一消息进行了处理,则该中间件必须将该第二消息转发给该同一选定的消费者(即使该选择是在中间件先前的实例中作出的)。使用日志来存储与该选择相关联的跨中间件的各个实例的数据。
当中间件重新运行时,其不使用新的序列标识符(不像生产者那样,如上所述,生产者在重新运行时可以使用新的序列标识符)。
并行中间件线程等待(步骤665)来自消费者1(530)的s10m1和s10m2已经被处理的确认。
参考图4,在第二个例子中,在并行生产者线程等待来自中间件1(510)的s1m1已经被处理的确认的同时,生产者(505)确定(步骤425)是否存在具有与第一入站消息相匹配的序列标识符的任何其他的入站消息有待发送用于处理。响应于确定没有其他的入站消息有待发送用于处理,并行生产者线程继续等待(步骤455)来自中间件1(510)的s1m1已经被处理的确认。
在第二个例子中,生产者(505)确定还有另一个入站消息(即第二入站消息s1m2)有待发送用于处理。因此,响应于确定存在其他的入站消息有待发送用于处理,生产者(505)确定与该第二入站消息相关联的序列标识符(即s1)。生产者(505)使用序列标识符来检查(步骤430)其日志,以便确定(步骤435)是否存在具有匹配序列标识符的记录。响应于确定没有具有匹配序列标识符的记录,该生产者(505)将该另一个消息发送(步骤410)给消费者。
在第二个例子中,生产者(505)确定存在具有匹配序列标识符的记录(即表4中的具有序列标识符“s1”的记录),并且因此,响应于确定存在具有匹配序列标识符的记录,生产者(505)确定(步骤440)相关联的中间件数据(即“I1”)。注意,生产者(505)确定日志中存在具有匹配序列标识符的日志记录,原因是由于并行生产者线程正在等待来自中间件1(510)的s1m1已经被处理的确认,因此还没有清除日志记录。
然后,生产者(505)将s1m2发送(步骤445)到与该确定的中间件数据相关联的中间件的队列(即与中间件1(510)相关联的队列(515))。应当注意,中间件1(510)是处理第一入站消息s1m1的同一个中间件实例,其中s1m1具有与第二入站消息s1m2相同的序列标识符。
生产者(505)记录(步骤450)与s1m2相关联的消息数据。在第二个例子中,表4中所表示的序列标识符字段中的数据(即s1)保持相同;由于m2是已发送的最新入站消息的序列号,因此序列号字段中的数据被覆盖(即m1被m2覆盖)并且表4中所表示的中间件标识符字段中的数据(即I1)保持相同。图8的表6中示出了已更新的生产者日志的表示。
响应于记录(步骤450)数据,生产者(505)确定(步骤425)是否存在具有与第一入站消息相匹配的序列标识符的任何其他的入站消息有待发送用于处理。在第二个例子中,生产者(505)确定没有任何其他的入站消息有待发送用于处理,并且并行生产者线程继续等待(步骤455)来自中间件1(510)的s1m1和s1m2已经被处理的确认。
参考图6,在并行中间件线程等待来自消费者1(530)的s10m1和s10m2已经被处理的确认的同时,中间件1(510)确定(步骤625)是否存在具有与第一入站消息(即s1m1)相匹配的序列标识符的任何其他的入站消息有待发送用于处理。响应于确定没有其他的入站消息有待发送用于处理,并行中间件线程继续等待(步骤630)来自消费者1(530)的s10m1和s10m2已经被处理的确认。
在第二个例子中,中间件1(510)确定在其队列(515)中还有另一个入站消息(即第二入站消息s1m2)有待发送用于处理。因此,响应于确定存在其他的入站消息有待发送用于处理,中间件1(510)确定与该第二入站消息相关联的序列标识符(即s1)。中间件1(510)使用序列标识符来检查(步骤630)其日志,以便确定(步骤635)是否存在具有匹配序列标识符的记录。响应于确定没有具有匹配序列标识符的记录,中间件1(510)将该另一个入站消息发送(步骤615)给消费者。
在第二个例子中,中间件1(510)确定存在具有匹配序列标识符的记录(即表5中的具有序列标识符“s1”的记录),并且因此,响应于确定存在具有匹配序列标识符的记录,中间件1(510)确定(步骤640)相关联的消费者数据(即“C1”)。
注意,中间件1(510)确定日志中存在具有匹配序列标识符的日志记录,原因是由于并行中间件线程正在等待来自消费者1(530)的s10m1和s10m2已经被处理的确认,因此还没有清除日志记录。
响应于接收到s1m2,中间件1(510)生成(步骤645)两个出站消息。中间件1(510)将入站序列标识符和相关联的入站序列号映射到出站序列标识符和至少一个相关联的出站序列号。
在第二个例子中,中间件1(510)为每个出站消息标记(步骤650)与入站序列标识符相关联的出站序列标识符以及与入站序列号相关联的出站序列号。该出站序列号在由该出站序列标识符标识的队列中是唯一的,并且该出站序列号随着时间而增大。
在第二个例子中,针对第二入站消息s1m2,生成第三出站消息s10m3(其中“s10”是序列标识符;“m3”是序列号并且“到数据库B”是消息有效载荷)并且生成另外的第四消息s10m4(其中“s10”是序列标识符;“m4”是序列号并且“更新第75行”是消息有效载荷)。必须在处理s10m4之前处理S10m3,原因是s10m3的序列号小于s10m4的序列号。此外,与第二入站消息相关联的第三出站消息的序列号的值(即s10m3中的3)必须大于与第一入站消息相关联的第二出站消息的序列号的值(即s10m2中的2),以保留顺序。
然后,中间件1(510)将s10m3和s10m4发送(步骤655)到与所确定的消费者数据相关联的消费者的队列(即与消费者1(530)相关联的队列(535))。应当注意,消费者1(530)是处理第一和第二出站消息(即s10m1和s10m2)的同一消费者实例,其中s10m1和s10m2具有与第三和第四出站消息s10m3和s10m4相同的序列标识符。
中间件1(510)强制性地在日志中记录(步骤660)与s1m2相关联的消息数据。在第二个例子中,中间件1(510)记录:第二入站消息的序列标识符(即s1);第三和第四出站消息的序列标识符(即s10);已发送的最新入站消息的入站序列号(即m2);与生成该第二入站消息的生产者相关联的生产者数据(例如,与生产者(505)相关联的标识符——在第二个例子中,该标识符为“P1”);已发送的最新出站消息的出站序列号(即m4)以及与对该出站消息进行处理的消费者相关联的消费者数据(例如,与消费者1(530)相关联的标识符——在第二个例子中,该标识符为“C1”)。图9的表7中示出了该日志的表示。
响应于记录(步骤660)数据,中间件1(510)确定(步骤625)是否存在具有与第一入站消息(即s1m1)相匹配的序列标识符的任何其他的消息有待发送用于处理。在第二个例子中,中间件1(510)确定没有任何其他的消息有待发送用于处理,并且并行中间件线程继续等待(步骤655)来自消费者1(530)的s10m1、s10m2、s10m3和s10m4已经被处理的确认。
在第二个例子中,消费者1(530)处理s10m1、s10m2、s10m3和s10m4(其中处理顺序由消息到达队列(535)的顺序来确定)。在s10m4已经被处理之后,消费者1(530)生成并发送一个确认给并行中间件线程,以确认s10m4已经被处理。由于在第二个例子中,对具有特定序列号的消息的确认同时用于确认每个具有较低序列号的消息,因此该确认还确认s10m1、s10m2和s10m3已经被处理。应当理解,作为替代,消息传递应用可以代表消费者实例生成并发送确认。
并行中间件线程确定(步骤670)是否已经接收到任何确认。如果没有接收到任何确认,生成器生成(步骤695)报警。
在第二个例子中,并行中间件线程确定(步骤670)已经接收到了确认(例如,其中并行中间件线程可以在一段预定的时间内等待确认)。
响应于接收到了确认,并行中间件线程检查(步骤675)其日志以便确定(步骤680)是否可以将有关已经处理了一个或多个入站消息的确认发送给生产者(505)。
也就是说,并行中间件线程将该确认中的序列标识符以及相关联的序列号与日志记录中的序列标识符数据以及相关联的序列号数据进行比较。响应于该比较,如果并行中间件线程确定没有接收到有关每个与已经发送的特定序列标识符相关联的待处理出站消息的确认,则生成器生成(步骤695)报警。
在第二个例子中,并行中间件线程将用于s10m4的确认与日志(如表7中所表示的)进行比较。该确认的序列标识符与该日志记录中的出站序列标识符数据相匹配。该确认的序列号与日志记录中的最新出站序列号数据相匹配,并且因此,由于该确认还确认对每个具有小于m4中的“4”的序列号的消息的处理,该确认还确认对s10m1、s10m2和s10m3的处理。
因此,响应于该比较,并行中间件线程确定已经接收到了针对每个已发送的与特定序列标识符相关联的待处理出站消息的确认。因此,并行中间件线程生成(步骤685)针对由生产者(505)生成的相关联的第一和第二入站消息(即s1m1和s1m2)的确认。具体地说,并行中间件线程生成(步骤685)针对s1m2的确认(其用于确认每个具有小于m2中的“2”的序列号的消息的处理,并且因此,该确认还确认对s1m1的处理)。
并行中间件线程将该确认发送(步骤685)给生产者(505)。应当注意,作为替代,消息传递应用可以代表中间件实例生成并发送确认。
由于已经接收到与每个已发送的与特定序列标识符相关联的待处理出站消息相关联的确认,并行中间件线程清除(步骤690)与已经被处理的出站消息的序列标识符相关联的日志记录(即表7中的与s10m4相关联(并因此与s10m1、s10m2和s10m3相关联)的日志记录)。因此,中间件可以“忘记”其已经针对任意给定序列选择了消费者。然后,中间件可以在下一次在该序列中看到消息时选择新的消费者实例。
参考图4,并行生产者线程确定(步骤460)是否已经接收到任何确认。如果没有接收到任何确认,则生成器生成(步骤470)报警。
在第二个例子中,并行生产者线程确定(步骤460)已经接收到了确认。响应于接收到了确认,并行生产者线程检查(步骤465)其日志以便确定(步骤475)生产者(505)是否能够如上所述地“忘记”有关与序列标识符相关联的待处理消息的日志记录。
在第二个例子中,将针对s1m2(并且因此针对s1m1)的确认与日志(如表6中所表示的)进行比较。该确认的序列标识符与该日志记录中的序列标识符数据相匹配。该确认的序列号与该日志记录的最新序列号数据相匹配,并且因此,由于该确认还确认对每个具有小于m2中的“2”的序列号的消息的处理,因此该确认还确认对m1的处理(即1序列号,其小于2)。
因此,并行生产者线程清除(步骤480)与已被处理的消息的序列标识符相关联的日志记录(即表6中的与s1m2相关联(并因此与s1m1相关联)的日志记录)。
因此,生产者可配置为将具有同一序列标识符的所有系统中待处理消息发送给同一中间件实例。这使得可以在序列中保留顺序,原因是单个中间件以消息到达其相关联队列的顺序来处理消息。此外,只有当已经接收到关于已发送给同一中间件实例(即I1)的具有同一序列标识符(即s1)的每个待处理消息(即m1,m2)的确认,生产者才能“忘记”其已经针对任意给定序列选择了中间件。然后,生产者(505)可以在下一次在该序列中看到消息时选择一个新的中间件实例。
这一点同样适用于中间件,其中中间件可配置为将具有同一序列标识符的所有系统中待处理出站消息发送给同一消费者实例。此外,只有当已经接收到关于已发送给同一消费者实例(即C1)的具有同一序列标识符(即s10)的每个待处理出站消息(即m1,m2,m3和m4)的确认,中间件才能“忘记”其已经针对任意给定序列选择了消费者。然后,中间件可以在下一次在该序列中看到消息时选择一个新的消费者实例。
应当理解,上面关于消费者而描述的对确认的生成和接收进行的优化,同样适用于中间件。
应当理解,本发明同样可以用于其中多个消费者或中间件实例驻留在单个物理计算机系统上的系统中。这种系统的有利之处在于通信更快速,原因是处理在存储器中发生。在该例子中,调度程序可以在存储器中选择一个消费者或中间件实例以向其发送与序列标识符相关联的消息,可以记录消息数据和消费者数据或中间件数据,并且可以接收来自消费者实例或中间件实例的确认。应当注意,调度程序可以驻留在与该消费者或中间件实例相同的物理计算机系统上,或者可以驻留在不同的物理计算机系统上。
应当注意,本发明可以扩展为多个(成串的)中间件。例如,第一串中间件可以转换消息并将消息发送给第二串中间件。第二串中间件可以记录与消息相关联的数据,并将消息转发给消费者。
Claims (25)
1.一种用于保留与消息相关联的顺序的系统,用于这样的环境中,其中消息包括相关联的顺序标识符;接收机可操作为接收与第一顺序标识符相关联的第一消息;以及选择组件可操作为选择用于处理所述第一消息的第一实体;所述系统包括:
确定组件,其用于确定是否已经由所述接收机接收到与完成对所述第一消息的处理相关联的通知;以及
控制器,其用于响应于接收到所述通知与由对所述通知进行接收的所述接收机接收到与所述第一标识符相关联的第二消息的组合,控制所述选择组件选择用于处理所述第二消息的第二实体。
2.根据权利要求1所述的系统,还包括记录组件,其用于将与消息相关联的数据以及与实体相关联的数据记录在存储组件中。
3.根据权利要求2所述的系统,其中所述存储组件是持久性的。
4.根据权利要求2所述的系统,其中所述存储组件不是持久性的。
5.根据权利要求2-4中任一项所述的系统,其中响应于接收到所述通知清除所述存储组件中的数据。
6.根据任一前述权利要求所述的系统,其中所述第一实体可操作为将所述第一消息转发给第三实体用于处理,并可操作为记录与所述第一消息相关联的数据以及与所述第三实体相关联的数据。
7.根据权利要求6所述的系统,其中所述第一实体可操作为响应于从所述第三实体接收到与完成对所述第一消息的处理相关联的另一通知,生成所述通知。
8.根据任一前述权利要求所述的系统,还包括用于生成顺序标识符的生成器。
9.根据任一前述权利要求所述的系统,其中所述通知与对多个消息的处理的完成相关联。
10.根据任一前述权利要求所述的系统,其中根据与所述系统相关联的参数来发送所述通知。
11.根据任一前述权利要求所述的系统,其中所述通知是非持久性的。
12.根据任一前述权利要求所述的系统,其中所述控制器可操作为响应于由所述接收机在接收到所述通知之前接收到与所述第一标识符相关联的第三消息,控制所述选择组件选择用于处理所述第三消息的所述第一实体。
13.一种用于保留与消息相关联的顺序的方法,用于这样的环境中,其中消息包括相关联的顺序标识符;接收机可操作为接收与第一顺序标识符相关联的第一消息;以及选择组件可操作为选择用于处理所述第一消息的第一实体;所述方法包括步骤:
确定是否已经由所述接收机接收到与完成对所述第一消息的处理相关联的通知;以及
响应于接收到所述通知与由对所述通知进行接收的接收机接收到与所述第一标识符相关联的第二消息的组合,控制所述选择组件选择用于处理所述第二消息的第二实体。
14.根据权利要求13所述的方法,还包括步骤:
将与消息相关联的数据以及与实体相关联的数据记录在存储组件中。
15.根据权利要求14所述的方法,其中所述存储组件是持久性的。
16.根据权利要求14所述的方法,其中所述存储组件不是持久性的。
17.根据权利要求14-16中任一项所述的方法,还包括响应于接收到所述通知而清除所述存储组件中的数据的步骤。
18.根据权利要求13-17中任一项所述的方法,其中所述第一实体将所述第一消息转发给第三实体用于处理,并记录与所述第一消息相关联的数据以及与所述第三实体相关联的数据。
19.根据权利要求18所述的方法,其中所述第一实体响应于从所述第三实体接收到与完成对所述第一消息的处理相关联的另一通知,生成所述通知。
20.根据权利要求13-19中任一项所述的方法,还包括步骤:生成顺序标识符。
21.根据权利要求13-20中任一项所述的方法,其中所述通知与对多个消息的处理的完成相关联。
22.根据权利要求13-21中任一项所述的方法,其中根据参数来发送所述通知。
23.根据权利要求13-22中任一项所述的方法,其中所述通知是非持久性的。
24.根据权利要求13-23中任一项所述的方法,还包括步骤:响应于由所述接收机在接收到所述通知之前接收到与所述第一标识符相关联的第三消息,控制所述选择组件选择用于处理所述第三消息的所述第一实体。
25.一种包括程序代码装置的计算机程序,所述程序代码装置适于在所述程序运行于计算机上时执行根据权利要求13-24中任一项所述的所有步骤。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB0524021.3 | 2005-11-25 | ||
| GBGB0524021.3A GB0524021D0 (en) | 2005-11-25 | 2005-11-25 | A system for preserving message order |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN1971521A true CN1971521A (zh) | 2007-05-30 |
| CN100472458C CN100472458C (zh) | 2009-03-25 |
Family
ID=35601206
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CNB2006101063022A Active CN100472458C (zh) | 2005-11-25 | 2006-07-19 | 用于保留消息顺序的系统和方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (2) | US8090759B2 (zh) |
| JP (1) | JP5128111B2 (zh) |
| CN (1) | CN100472458C (zh) |
| GB (1) | GB0524021D0 (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105765555A (zh) * | 2013-11-06 | 2016-07-13 | 亚马逊科技公司 | 分布式系统中的严格排队 |
| US10200295B1 (en) | 2014-06-27 | 2019-02-05 | Amazon Technologies, Inc. | Client selection in a distributed strict queue |
Families Citing this family (24)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7818426B2 (en) * | 2007-03-27 | 2010-10-19 | Oracle America, Inc. | Method and system for processing a message by a message provider |
| US7774490B2 (en) | 2007-09-20 | 2010-08-10 | Microsoft Corporation | Crisscross cancellation protocol |
| EP2198576B1 (en) * | 2007-09-20 | 2011-01-12 | Markport Limited | Message delivery in mobile networks |
| EP2304922A1 (en) * | 2008-06-17 | 2011-04-06 | Attivio, Inc. | Ordered message processing |
| US8200765B2 (en) * | 2009-01-12 | 2012-06-12 | International Business Machines Corporation | Preserving message order using a message ordering manager |
| US20100250684A1 (en) * | 2009-03-30 | 2010-09-30 | International Business Machines Corporation | High availability method and apparatus for shared resources |
| ES2520941T3 (es) * | 2009-05-18 | 2014-11-12 | Amadeus S.A.S. | Método y sistema para gestionar el orden de mensajes |
| US8375095B2 (en) * | 2009-12-22 | 2013-02-12 | Microsoft Corporation | Out of order durable message processing |
| US8495656B2 (en) | 2010-10-15 | 2013-07-23 | Attivio, Inc. | Ordered processing of groups of messages |
| CN103532822B (zh) * | 2012-07-02 | 2016-12-21 | 北京神州泰岳软件股份有限公司 | 消息投递的管理方法、服务器和系统 |
| US10185605B2 (en) * | 2012-08-31 | 2019-01-22 | Sap Se | In-order message processing with message-dependency handling |
| CN103078811B (zh) * | 2013-01-31 | 2015-12-09 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
| US9894143B1 (en) | 2013-11-06 | 2018-02-13 | Amazon Technologies, Inc. | Pre-processing and processing pipeline for queue client |
| US9223843B1 (en) * | 2013-12-02 | 2015-12-29 | Amazon Technologies, Inc. | Optimized log storage for asynchronous log updates |
| US9378236B2 (en) * | 2013-12-26 | 2016-06-28 | Microsoft Technology Licensing, Llc | In-place recipient preservation |
| US9665840B2 (en) | 2014-03-21 | 2017-05-30 | Oracle International Corporation | High performance ERP system ensuring desired delivery sequencing of output messages |
| US10419579B2 (en) * | 2014-07-10 | 2019-09-17 | Telefonaktiebolaget Lm Ericsson (Publ) | Methods and devices for signalling in a communication network |
| US10244070B2 (en) | 2016-01-26 | 2019-03-26 | Oracle International Corporation | In-memory message sequencing |
| US9935888B2 (en) * | 2016-05-02 | 2018-04-03 | Visa International Service Association | System and method for latency-based queuing |
| AU2018280855B2 (en) | 2017-06-08 | 2021-09-09 | Amadeus S.A.S. | Multi-standard message processing |
| US10284515B2 (en) | 2017-06-08 | 2019-05-07 | Amadeus S.A.S. | Multi-standard message processing |
| US11150945B2 (en) * | 2019-09-04 | 2021-10-19 | Red Hat, Inc. | Reverse restartable sequences for lock polling scalability |
| US11579801B2 (en) | 2020-06-09 | 2023-02-14 | Samsung Electronics Co., Ltd. | Write ordering in SSDs |
| US12495319B2 (en) | 2022-10-13 | 2025-12-09 | T-Mobile Usa, Inc. | Evaluating operation of a monitoring system associated with a wireless telecommunication network |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH025134A (ja) * | 1988-06-24 | 1990-01-10 | Nec Corp | メッセージスケジュール方式 |
| JPH05120178A (ja) * | 1991-10-30 | 1993-05-18 | Kyushu Nippon Denki Software Kk | 電文保証方法 |
| US6604205B1 (en) * | 2000-02-07 | 2003-08-05 | Hewlett-Packard Development Co., L.P. | System and method for state synchronization |
| US20020042830A1 (en) * | 2000-03-31 | 2002-04-11 | Subhra Bose | System, method and applications real-time messaging over HTTP-based protocols |
| US6850982B1 (en) * | 2000-12-19 | 2005-02-01 | Cisco Technology, Inc. | Methods and apparatus for directing a flow of data between a client and multiple servers |
| WO2002054263A1 (en) * | 2000-12-28 | 2002-07-11 | Future System Consulting Corp. | Framework system |
| US7164654B2 (en) * | 2001-03-09 | 2007-01-16 | Denso Corporation | ARQ parameter retransmission control for variable data rate channels |
| JP2005120178A (ja) | 2003-10-15 | 2005-05-12 | Yokohama Rubber Co Ltd:The | シリカマスターバッチの製造方法 |
| US20050198401A1 (en) * | 2004-01-29 | 2005-09-08 | Chron Edward G. | Efficiently virtualizing multiple network attached stores |
| US7894372B2 (en) * | 2005-05-31 | 2011-02-22 | Iac Search & Media, Inc. | Topology-centric resource management for large scale service clusters |
| US20070047539A1 (en) * | 2005-09-01 | 2007-03-01 | Tekelec | Methods, systems, and computer program products for preserving sequencing of signaling messages at a routing node |
| US7892399B2 (en) * | 2008-05-29 | 2011-02-22 | Honeywell Asca Inc. | Local tension generating air stabilization system for web products |
-
2005
- 2005-11-25 GB GBGB0524021.3A patent/GB0524021D0/en active Pending
-
2006
- 2006-07-19 CN CNB2006101063022A patent/CN100472458C/zh active Active
- 2006-11-07 JP JP2006301466A patent/JP5128111B2/ja not_active Expired - Fee Related
- 2006-11-21 US US11/561,979 patent/US8090759B2/en active Active
-
2011
- 2011-10-31 US US13/285,093 patent/US8364743B2/en not_active Expired - Fee Related
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105765555A (zh) * | 2013-11-06 | 2016-07-13 | 亚马逊科技公司 | 分布式系统中的严格排队 |
| US10200295B1 (en) | 2014-06-27 | 2019-02-05 | Amazon Technologies, Inc. | Client selection in a distributed strict queue |
Also Published As
| Publication number | Publication date |
|---|---|
| US20070124398A1 (en) | 2007-05-31 |
| US8090759B2 (en) | 2012-01-03 |
| JP2007149081A (ja) | 2007-06-14 |
| GB0524021D0 (en) | 2006-01-04 |
| CN100472458C (zh) | 2009-03-25 |
| US20120047518A1 (en) | 2012-02-23 |
| US8364743B2 (en) | 2013-01-29 |
| JP5128111B2 (ja) | 2013-01-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN100472458C (zh) | 用于保留消息顺序的系统和方法 | |
| CN110351203B (zh) | 一种消息处理方法、装置、系统、服务器及存储介质 | |
| US20040205770A1 (en) | Duplicate message elimination system for a message broker | |
| US7996849B2 (en) | Method, apparatus and software for managing a transactional message queue | |
| EP3066578B1 (en) | Strict queue ordering in a distributed system | |
| CA2758844A1 (en) | A method and system for managing the order of messages | |
| CN113971519B (zh) | 一种机器人调度方法、装置、电子设备和存储介质 | |
| CN113159680A (zh) | 库存预占方法、装置、电子设备和计算机可读介质 | |
| CN104683486A (zh) | 分布式系统中处理同步消息的方法、装置、分布式系统 | |
| WO2020067872A1 (en) | A method of prioritizing message handling in a publisher/subscriber broker | |
| CN115499493B (zh) | 异步事务处理方法、装置、存储介质及计算机设备 | |
| US20080178182A1 (en) | Work state returning apparatus, work state returning method, and computer product | |
| JP4887338B2 (ja) | 情報交換コンピュータシステム及び該システムの運用プログラム | |
| CN111158934A (zh) | 基于缓冲队列接收数据实现不同级别延迟拼接方法和装置 | |
| KR101639912B1 (ko) | 철강 공정 미들웨어의 이벤트 관리 시스템 | |
| CN116233154A (zh) | 用于多系统的配置数据同步方法及装置 | |
| JP4716492B2 (ja) | 冗長構成システムおよび第1のコンピュータシステムに障害が発生したときに第2のコンピュータシステムが直ちにリカバーする方法 | |
| JP4918696B2 (ja) | サーバ監視システムおよびそのためのプログラム | |
| KR100955423B1 (ko) | 버퍼 관리 방법, 그 장치, 서버 및 전장 시스템 | |
| US10148585B2 (en) | Communication control method, information processing apparatus, and storage medium | |
| CN111402044A (zh) | 数据配置系统及其数据配置方法 | |
| JP2014165675A (ja) | リアルタイムデータ転送システム及びリアルタイムデータ転送方法 | |
| JP2008108046A (ja) | トランザクション処理システムおよびトランザクション処理方法、ならびにそのプログラム | |
| JP2006350474A (ja) | リアルタイム処理システム、処理装置、リアルタイム処理方式、及びプログラム | |
| JP4379426B2 (ja) | キュー統合システム及び方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| C14 | Grant of patent or utility model | ||
| GR01 | Patent grant |