CN1798111A - 服务器排队系统和方法 - Google Patents
服务器排队系统和方法 Download PDFInfo
- Publication number
- CN1798111A CN1798111A CNA2005101287546A CN200510128754A CN1798111A CN 1798111 A CN1798111 A CN 1798111A CN A2005101287546 A CNA2005101287546 A CN A2005101287546A CN 200510128754 A CN200510128754 A CN 200510128754A CN 1798111 A CN1798111 A CN 1798111A
- Authority
- CN
- China
- Prior art keywords
- message
- message groups
- groups
- group
- relevant identifier
- 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; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/40—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass for recovering from a failure of a protocol instance or entity, e.g. service redundancy protocols, protocol state redundancy or protocol service redirection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99938—Concurrency, e.g. lock management in shared database
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
- Y10S707/99945—Object-oriented database structure processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
- Communication Control (AREA)
Abstract
一种用于可靠消息传送的排队服务器,其中一个子系统想要异步地执行一个或多个已排序操作。消息被成组地发送给队列,一组中可以含有一条或多条消息。在特定组中的消息以预定的顺序处理。可任选地,消息组可以被标记为相关的,使得特定相关中的所有组可以按预定的顺序处理。消息可以被存储在SQL数据库表中,直到对该消息的处理完成。消息系统的接收方可以跨多个机器和/或跨任何给定机器的可用资源而缩放。系统可以处理发送方的“灾难”情形(即,发送机器在发送组过程中崩溃)和接收方的“灾难”情形(即,电源故障引起至少一个接收机器上的重新引导)。
Description
背景技术
排队系统允许若干不同的用户(和/或进程)发送数据和/或处理请求,这些数据和请求将被存储在队列中以供接收子系统稍后使用。例如,项目服务器子系统可以向排队系统发送一条或多条消息。排队系统存储该信息,直到接收子系统能够检索并处理所存储的信息。然而,机器故障和子系统与排队系统之间和之中的通信中断可能会引起处理中的差错和/或使得不能够处理所存储的信息。
发明内容
本发明针对用于可靠消息传送的服务器排队方法和系统。排队系统可以在例如其中一个子系统想要异步地执行一个或多个已排序操作的情况中使用。消息被成组地发送给队列,一组中可以含有一条或多条消息。在特定组中的消息以预定的顺序处理。消息组可以被标记为相关的,使得特定相关中的所有组可以按预定的顺序处理。消息可以被存储在SQL数据库表中,直到对该消息的处理完成。消息系统的接收方可以跨多个机器和/或跨任何给定机器的可用资源而缩放。系统可以处理发送方的“灾难”情形(即,发送机器在发送组过程中崩溃)和接收方的“灾难”情形(即,电源故障引起至少一个接收机器上的重新引导)。
在本发明的一方面中,一种排队系统接收从发送者子系统发送的消息组,其中,每一消息组包含至少一条消息。所接收的消息组使用排队系统以预定的顺序存储。排队系统接收每一消息组的相关标识符;所接收的相关标识符使用排队系统存储。所存储的消息组和相关标识符根据预定的顺序发送。
附图说明
图1示出了根据本发明的示例性实施例可以使用的计算设备。
图2示出了根据本发明的各方面用于可靠消息传送的排队系统的框图。
图3示出了根据本发明的各方面,示出用于获取下一可用组的进程的操作流程图。
图4示出了根据本发明的各方面,示出用于使用接收者和工作者线程的进程的操作流程图。
图5示出了根据本发明的各方面,示出用于使用消息处理工作者线程的进程的操作流程图。
具体实施方式
本发明针对一种用于可靠消息传送的服务器排队方法和系统。排队服务器可以例如在其中一个子系统想要异步地执行一个或多个已排序操作的情况下使用。消息被成组地发送给队列,一组中可以含有一条或多条消息。在特定组中的消息以预定的顺序处理。消息组可以被标记为相关的,使得特定相关中的所有组可以按预定的顺序处理。消息可以被存储在SQL数据库表中,直到对该消息的处理完成。消息系统的接收方可以跨多个机器和/或跨任何给定机器的可用资源而缩放。系统可以处理发送方的“灾难”情形(即,发送机器在发送组过程中崩溃)和接收方的“灾难”情形(即,电源故障引起至少一个接收机器上的重新引导)。
说明性操作环境
参考图1,用于实现本发明的一个示例性系统包括诸如计算设备100的计算设备。计算设备100可以被配置为客户机、服务器、移动设备或与基于网络的协作系统中的数据交互的任何其它计算设备。在最基本配置中,计算设备100一般包括至少一个处理单元102和系统存储器104。取决于计算设备的确切配置和类型,系统存储器104可以是易失性的(诸如RAM),非易失性的(诸如ROM、闪存等)或者两者的某种组合。系统存储器104一般包括操作系统105、一个或多个应用程序106,且可以包括程序数据107。将在下文详细描述的服务器排队系统108一般在应用程序106内实现。
计算设备100可以具有额外的特征或功能。例如,计算设备100也可以包括诸如磁盘、光盘或磁带等附加数据存储设备(可移动和/或不可移动)。这样的附加存储在图1中由可移动存储109和不可移动存储110示出。计算机存储介质可以包括以用于诸如计算机可读指令、数据结构、程序模块或其它数据等信息的存储的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算设备100访问的任何其它介质。任何这样的计算机存储介质可以是设备100的一部分。计算设备100也可以含有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等输入设备。也可以包括诸如显示器、扬声器、打印机等输出设备。
计算设备100也含有允许该设备诸如通过网络与其它计算机设备118通信的通信连接116。网络包括局域网和广域网,以及其它大规模网络,包括但不限于内联网和外联网。通信连接116是通信介质的一个示例。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。在此处使用的术语计算机可读介质包括存储介质和通信介质两者。
排队系统服务器
图2示出了根据本发明的各方面用于可靠消息传送的排队系统的框图。示例性系统包括排队服务器200、发送子系统客户机250、252、254以及接收子系统客户机260、262、264。(根据本发明的其它系统可以包括一个或多个发送子系统客户机和/或一个或多个接收子系统客户机)。服务器210包含一条或多条存储的消息,这些消息被组织为消息组210。消息组210被存储在消息队列230(诸如SQL表)中,每一消息组与组队列240(例如,也可以是SQL表)中一个条目相关联。
发送消息:
发送子系统客户机250、252、254可以调用Sender(发送者)对象,Sender在下文中使用API(应用程序编程接口)来定义。例如,Sender对象可以被定义如下:
public Sender(Type queueAccessType);
public Sender(Type queueAccessType,string serverId);
public Guid BeginMessageGroup(int messageType,int priority,Guid correlationId);
public void Send(object messageBody);
public void EndMessageGroup();
public void CancelMessageGroup();
首先,发送子系统客户机创建Sender对象。构造函数的参数一般是提供IQueueAccess接口(在下文中描述)的类的System.Type(系统类型)。替换构造函数可以采用serverId(服务器ID),serverID可以是标识发送消息的服务器实例的任意串。如果项目服务器中仅有一个实例在给定的机器上运行,那么serverID可以是机器名。发送子系统客户机一般不使用ServerID值。
一旦构造了Sender对象,客户机调用BeginMessageGroup()(开始消息组)。messageType(消息类型)参数是可以用于区分共享公共队列的不同类型的消息的客户机定义的值。例如,消息类型可以是Save(保存)、Publish(发布)和Report(报告)类型的消息。客户机可以为这些消息类型定义某些任意的常量,并且该值可以用来分支到接收方上正确的消息处理代码。
priority(优先级)参数可以用于为消息组指定优先级值。例如,值“1”可以是最高优先级,而较大的数字可以是较低的优先级。
correlationId(相关ID)参数一般是用于使分离的消息组相关的客户机提供的GUID。例如,根据预定的顺序(诸如以它们被接收的顺序)处理来自特定用户的消息(诸如来自时间表条目程序的消息)。每一时间表的提交可以作为一个消息组发送。排队服务器200可以使用相关Id来确保即使存在处理时间表消息的多个线程,这些组中的每一个也是根据预定的顺序(诸如按顺序的次序)来处理的。在该时间表示例中,correlationId值可以是ResourceID(资源ID)。
BeginMessageGroup()的返回值是组的UID。UID可以用于涉及消息组状态的查询。
在调用BeginMessageGroup之后,发送子系统客户机可以使用Send()来发送任何数量的消息。messageBody(消息正文)参数一般是表示正被发送的消息的任意对象。messageBody参数可以包括消息数据,以及甚至用于在接收方处理数据的方法。然而,该任意对象应该能够根据预定的顺序来组织(诸如能够被串行化)。排队服务器200一般维护对象的串行化和反串行化,以存储在队列数据库表中。队列数据库表可以被优化,使得如果消息已经是二进制格式的(例如,字节数组),那么系统可以将数据“按原状”写入数据库。
一旦发送了所有消息,客户机可以调用EndMessageGroup()(结束消息组)。EndMessageGroup()关闭该组,并标识该组为准备好由接收代码(在下文描述)来处理。
如果为某种原因而需要丢弃未完成的组,那么可以调用CancelMessageGroup()(取消消息组)。CancelMessageGroup()可以用来从队列中移除在调用BeginMessageGroup()之后发送的所有消息。尽管在调用EndMessageGroup之后不能向消息组添加另外的消息,但是可以通过仅再次调用BeginMessageGroup来重复使用Sender对象本身。由Begin/EndMessageGroup对之间发送的所有消息定义的消息组一般不被处理,直到成功调用EndMessageGroup。倘若在发送消息时系统崩溃,将在队列中留下未完成的组。该未完成的组可以由下文描述的清除进程来成功地移除。
接收消息:
接收者系统被设计成作为从队列中检索出消息并然后调用适当的处理代码的线程来工作。作为结果,处理消息的代码的开发者一般不需要使用由以下API定义的任何Receiver(接收者)对象。该API用来在项目服务器被启动或由管理员手动激活时设置接收服务。Receiver对象可以定义如下:
public Receiver(Type queueAccessType,Type processMessageType,string serverId);
public void Start(bool asynchronous);
public void Stop();
public bool Done;
public int ServiceLimit;
public int ThreadSleepTime;
Receiver对象是使用queueAccessType(队列访问类型)、processMessageType(处理消息类型)和serverID参数来构造的。queueAccessType参数是支持IQueueAccess接口的对象的System.Type,processMessageType是支持IprocessMessage接口的对象的System.Type,而serverID一般是用于标识接收者所属的服务器实例的任意串。如果每个机器仅使用一个实例,那么serverID可以是机器名。(这些构造函数参数的操作将在下文更完全地描述。)
一旦构造了Receiver对象,那么可以通过调用Start()(启动)来启动它。一般接收者应该多半运行为线程,从而“asynchronous(异步)”参数应该为“true(真)”,尽管它可以通过传递参数“false(假)”来同步运行。可以实现替换实施例,使得系统可以总是异步地运行。
不论同步还是异步启动,接收服务可以通过调用Stop()(停止)来关闭。调用Stop指导接收服务关闭任何活动的工作者线程并然后退出。当接收者线程以及与该接收者相关联的所有工作者线程实际完成时,Done(完成)属性可以被设为“true”。
ServiceLimit(服务限制)是可以用来指定接收者可以使用多少工作者线程的读/写属性。ServiceLimit可以被设为默认为值“1”。ServiceLimit一般可以在接收者线程运行时被更改。
ThreadSleepTime(线程睡眠时间)是指定接收者线程在每次向队列轮询新消息之间睡眠多长时间(例如,以毫秒为单位)的读/写属性。ThreadSleepTime可以被设为默认为值1000,当使用毫秒为单位时即一秒钟。
由于线程的考虑,发送者和接收者一般为queueAccess和processMessageType(而不是对象的实例本身)采用System.Type值。如果Sender和Receiver采纳它们请求的对象的实例,那么这些对象必须是完全线程安全的,这意味着这些对象引用的任何其它对象也必须是线程安全的。为了避免这个问题,Sender和Receiver(使用传递的System.Type对象)为每一产生的线程例示指定对象的副本。从而,只有提供IqueueAccess或IprocessMessage的对象应该必须是部分线程安全的(这意味着它们必须保护对静态类成员的访问,但不保护对任何实例对象的访问)。
处理消息:
当启动接收服务时,它采用的参数之一是支持IProcessMessage接口的对象的System.Type,IProcessMessage接口定义如下:
public interface IProcessMessage{
bool ProcessMessageCallback(Message msg,Group messageGroup,MessageContext mContext);
void StartMessageGroup(Group messageGroup,MessageContext mContext);
void EndMessageGroup(Group messageGroup);}
每一Receiver对象的工作者线程例示了客户机对象的一个实例。在读取任何消息之前,调用IProcessMessage.StartMessageGroup()(处理消息的启动消息组)。这向客户机给出在处理消息组之前进行所需的初始化或其它处理的机会。下一步,对消息组中的每一消息,调用IProcessMessage.ProcessMessageCallback()(处理消息的处理消息返回)。
ProcessMessageCallback的返回值指定了该消息是否被成功处理。如果返回了值“true”,那么该消息可以出队。返回值“false”指示该消息失败,且排队系统然后可以使用同一消息再次调用ProcessMessageCallback。
当接收线程完成读消息(或者通过接收最近的消息,或者由于异常而中止)时,可以调用IProcessMessage.EndMessageGroup()(处理消息的结束消息组)。这向客户机给出进行可能所需的任何清除或结束的机会。
Message(消息)参数一般是消息本身。该对象含有以下属性:
public int MessageId;
public object MessageBody;
MessageId给出了消息的ID,该ID在该组中唯一。组中第一条消息一般具有ID 1,而该组中第二条消息也具有ID 1,依此类推。MessageBody是最初通过Sender.Send()方法发送的对象。
Group(组)参数是一般含有关于消息所属的组的元数据的对象。Group参数提供以下属性:
public Guid GroupId;
public Guid CorrelationId;
public int MessageType;
public int Priority;
public int LastMessageId;
GroupId(组ID)是该组的唯一标识符。每一消息组具有唯一的GroupId。CorrelationId是消息的相关组的唯一标识符。它对应于当调用Sender.BeginMessageGroup()(发送者的开始消息组)时传递给Sender.BeginMessageGroup()的参数。MessageType是指定消息类型的客户机定义的枚举类型。MessageType对应于传递给Sender.BeginMessageGroup()的参数。Priority是组的优先级。Priority对应于传递给Sender.BeginMessageGroup()的参数。LastMessageId(最后消息ID)给出了组中最后一条消息的MessageId。从而当遇到组中最后一条消息时msg.MessageId与messageGroup.LastMessageId相同。
MessageContext(消息上下文)参数可以包含关于消息的当前处理状态的额外信息。MessageContext参数可以定义如下:
public int RetryCount;
public int GroupRetryCount;
public int SleepBeforeRetry;
RetryCount(重试计数)是使用特定消息调用ProcessMessageCallback的次数。在第一次调用时,值一般为“1”。GroupRetryCount(组重试计数)是特定组尝试处理的次数。如果由于某种原因接收者工作者线程异常中止处理组,GroupRetryCount将重试该组,一般从第一条未处理的消息开始。SleepBeforeRetry(重试之前睡眠)是客户机设定的参数,它告知工作者线程万一消息的处理失败,它在重试消息之前应该睡眠多长时间。
低级队列访问:
排队服务器200一般是队列存储“不可知的”(即,服务器不依赖于队列存储的内部工作方式)。排队服务器200通过支持IqueueAcess(队列访问)的对象进行队列读/写/出队访问,IQueueAcess的System.Type被传递给Sender和Receiver对象的构造函数。IQueueAcess可以定义如下:
public interface IQueueAccess{
//获取MSPSQS应该处理的下一组
void GetNextGroup(out Group msgGroup);
//从队列中移除指定组
void PopGroup(Group msgGroup);
//返回队列中groupId与msgGroup.GroupId相等的下一条消息
void ReadMessage(Group msgGroup,out Message msg);
//由msgGroup和msg指定的消息出队)
void PopMessage(Group msgGroup,Message msg);
//给定组元数据,打开消息组
void openGroup(Group msgGroup);
//将由msgGroup和msg指定的消息入队
void SendMessage(Group msgGroup,Message msg);
//关闭消息组
void CloseGroup(Group msgGroup);
//从消息队列和组队列中删除给定组的所有记录
void FlushGroup(Group msgGroup);
//为由名为serverId的服务器实例锁定发送的组解除锁定)
void UnlockServerGroups(string serverId);}
IQueueAcess的默认实现可以使用两个SQL表(例如,消息队列230和组队列240)来构建。然而,由于排队服务器200的剩余部分与队列访问的分离,整个系统可以被构建在任一合适的存储系统(诸如MSMQ或Yukon SSB)之上。
队列存储:
消息队列230是持有从发送子系统客户机发送的消息的实际消息正文数据的表。对每一Sender.Send()调用,一般向该表添加一行。尽管附图将消息组示为群集在一起,但是实际上,来自多个组的消息可以是交错的。消息队列230一般用作数据容器。经常在该表上执行的操作是插入(Insert)新的消息、删除(Delete)处理过的消息和选择(Select)(读)下一消息。该表中的记录对应于上述Message对象。
所示实施例示出了消息队列230的一个表,但是替换实施例可以按所需的将该表分割成多个表。替换实施例仅需增强IQueueAccess.ReadMessage、IQueueAccess.PopMessage及IQueueAccess.SendMessage的实现来实现多个表。第二张表,即组队列(240)用于选取下一组、处理和管理组及相关锁、以及持有额外的元数据。该组中的记录对应于上述Group对象。在消息队列230和组队列(240)中的记录之间经常存在多对一的关系。消息队列230一般含有对发送的每一个别消息的记录。组队列(240)一般对发送的每一消息组含有一条记录。
向队列添加新组
当发送子系统客户机调用Sender.BeginMessageGroup()时,新的记录被添加到该组队列。该记录被标记为“锁定发送”,来确保没有接收者在该组完成之前会开始处理该组。当客户机调用了Sender.Send()任意次数后,可以调用Sender.EndMessageGroup(),它使用发送的最后一条消息的ID来更新组记录,并将该组标记为未锁定。
获取下一可用的组:
图3示出了根据本发明的各方面,示出用于获取下一可用组的进程的操作流程图。一般而言,该进程寻找这样的最高优先级的组,其相关组(共享相关ID的那些组)没有锁定接收,其组没有锁定发送,且其相关不含有拥有更高优先级的、在锁定发送的队列前端的组。该进程的逻辑可以依据排队系统的使用方式而不同。
该进程在开始框300处开始,并前进至框310,在那里获取其相关没有锁定接收的所有组的列表。该列表可以按照队列中的位置和特定消息组的优先级来排序。
在框320中,作出该列表是否非空的判断,并且如果在列表中存在组,那么前进至框340。如果没有组存在于列表中,该进程前进至框330并终止。
在框340处,获取列表中的第一组,并在框350中评估该组来确定该框是否锁定发送。如果该框被锁定发送,那么该进程前进至框360,在那里从列表中移除共享锁定组的相关ID的所有组。如果该框没有被锁定发送,那么该进程前进至框370,在那里该框被锁定发送,并被返回至调用进程。
获取下一可用组:
图4示出了根据本发明的各方面,示出用于使用接收者和工作者线程的进程的操作流程图。一般而言,接收者线程监视队列的可用组。在接收者线程开始轮询队列之前,它首先对按照被传递给构造函数的serverId参数的服务器实例名称锁定发送的任何组解除锁定。组被解除锁定来允许清除/恢复进程。如果接收者线程异常停止(例如,由于机器重引导),当前处理的组将以其它方式保持锁定发送。从而,一旦服务器实例重新启动,这些组就被解除锁定。
之后,接收者线程向队列轮询可用组。当有一组可用,且工作者线程的数量小于允许的最大值,那么接收者线程可以创建工作者线程来处理该组。如果工作者线程成功地处理该组,那么该组项从组队列中移除。如果没有成功处理,那么工作者线程重新启动该组。
该进程在开始框400处开始,并前进至框405,在那里按照接受者所属的且serverId相关联的服务器实例对任何锁定的线程解除锁定接收。
在框410中,作出关于是否有可用的任何工作者线程的判断。如果有任何可用的工作者线程,该进程前进至框415,在那里获取下一个可用的组。如果没有可用的工作者线程,那么该进程前进至框430,以检查工作者线程的状态之前进行等待。
在框420中,作出关于是否获取下一可用组的判断。如果获取了下一可用组,那么该进程前进至框425,在那里启动工作者线程。当工作者线程被启动之后,该进程返回至框410。如果没有获取下一可用组,那么该进程前进至框430,以在检查工作者线程的状态之前进行等待。
在框430中的等待之后,该进程前进至框435,在那里检查工作者线程的状态。在框440中,作出关于是否已经处理了下一可用组中的所有消息的判断。如果不是下一可用组中的所有消息尚未被处理,那么该进程前进至框445,在那里重新启动工作者线程。如果下一可用组中的所有消息都已经被处理,那么该进程前进至框450处,在那里从组队列中移除该组。
在框445中重新启动工作者线程或者框450中从组队列中移除组之后,该进程前进至框455,在那里作出是否还存在要检查的工作者线程的判断。如果还存在要检查的工作者线程,那么该进程返回至框435,在那里检查工作者线程的状态。如果不存在要检查的工作者线程,那么该进程返回至框410,在那里再次作出关于是否有任何可用的工作者线程的判断。
消息处理工作者线程:
图5示出了根据本发明的各方面,示出用于使用消息处理工作者线程的进程的操作流程图。一般而言,消息处理工作者线程循环操作。当消息位于消息队列上时,消息处理工作者线程读消息并调用IProcessMessage.ProcessMessageCallback()。如果该函数返回“true”(指示消息的成功处理),那么从队列中移除该消息。否则重试。
该进程在开始框500处开始,并前进至框505,在那里读消息。在框520中,作出关于是否成功获取消息的判断。如果成功地获取了消息,那么该进程前进至框530。如果没有成功获取消息,那么该进程前进至框560并终止。
在框530中,处理成功获取的消息,且该进程前进至框540,在那里作出关于是否成功地处理了该消息的判断。如果消息没有被成功地处理,那么该进程返回至框530,在那里再次处理获取的消息。(可以在进程逻辑中放置检查,以当消息不能被正确地处理时异常中止处理。)如果消息被成功地处理了,那么该进程前进至框550,在那里该消息从队列中“出队”(即,被移除并调整相关联的指针)。在消息被出队之后,该进程返回至框510,在那里读取另一条消息。该进程反复,直到不再获取消息,在该情况中,然后处理在结束框560处终止。
从子系统故障中恢复:
解决了子系统故障的两种情况:其中接收机器被重新引导并返回在线的情形,以及其中接收机器崩溃并且在相当的一段时间内没有返回在线的情形。(相当一段时间可以是可以向另一机器分配由崩溃的机器执行的处理负载的长度的时间。)
可通过当组队列240中的组条目被锁定接收时,使用接收者的实例名称(传递给构造函数的serverId参数)标记它,来使得能够从发送子系统崩溃中恢复。在重新引导的情形中,在接收服务重启之后的第一个动作一般是对由该示例锁定接收的任何组解除锁定。然后可以挑选组并由任何可用的接收服务来处理该组。
当接收子系统崩溃并且在相当的时间内没有返回时,那么(如同发送者崩溃的情况)一般存在失去时效的、被标记为用于接收的一个或多个组。这种情况的清除是通过对这些组解除锁定来实现的。一旦这些组被解除锁定,可以挑选这些组来由消息处理线程继续处理。
以上说明书、示例和数据提供了本发明的组成部分的制造和使用的完整描述。由于可以实现本发明的多个实施例,而不背离本发明的精神和范围,因此本发明由此后所附的权利要求书定义。
Claims (20)
1.一种用于排队消息的计算机实现的方法,包括:
在排队系统中接收从发送者子系统发送的消息组,其中,每一消息组包含至少一条消息;
使用所述排队系统以预定的顺序存储所接收到的消息组;
在所述排队系统中接收每一消息组的相关标识符,其中,所述相关标识符用于关联消息组;
使用所述排队系统存储所接收的相关标识符;以及
根据所述预定的顺序和所述相关标识符来发送所存储的消息组。
2.如权利要求1所述的计算机实现的方法,其特征在于,所述接收到的消息组被存储在SQL表中。
3.如权利要求1所述的计算机实现的方法,其特征在于,所述存储的消息组被发送给多台机器。
4.如权利要求1所述的计算机实现的方法,其特征在于,一优先级值与每一接收到的消息组相关联。
5.如权利要求4所述的计算机实现的方法,其特征在于,所述消息组是根据所述相关联的优先级值来发送的。
6.如权利要求1所述的计算机实现的方法,其特征在于,一GUID被用作所属相关标识符。
7.如权利要求6所述的计算机实现的方法,其特征在于,所述GUID是客户机提供的。
8.如权利要求1所述的计算机实现的方法,其特征在于,所述预定的顺序是接收所述消息组的顺序。
9.如权利要求1所述的计算机实现的方法,其特征在于,相关联组的最后一个消息组是在发送所述相关联组的任何存储的消息组之前接收的。
10.如权利要求1所述的计算机实现的方法,其特征在于,还包括对由所述相关标识符关联的接收到的消息组锁定发送,以及一旦接收到由所述相关标识符关联的最后一个消息组,就对所接收的消息组解除锁定发送。
11.一种用于排队消息的系统,包括:
用于在排队系统中发送从发送者子系统发送的消息组的装置,其中,每一消息组包含至少一条消息;
用于使用所述排队系统以预定的顺序存储所接收到的消息组的装置;
用于在所述排队系统中接收每一消息组的相关标识符的装置,其中,所述相关标识符用于关联消息组;
用于使用所述排队系统存储所接收的相关标识符的装置;以及
用于根据所述预定的顺序和所述相关标识符来发送所存储的消息组的装置。
12.如权利要求11所述的系统,其特征在于,所述接收到的消息组被存储在SQL表中。
13.如权利要求11所述的系统,其特征在于,所述存储的消息组被发送给多台机器。
14.如权利要求11所述的系统,其特征在于,一优先级值与每一接收到的消息组相关联。
15.如权利要求14所述的系统,其特征在于,所述消息组是根据所述相关联的优先级值来发送的。
16.一种含有用于管理消息的排队系统的计算机可执行指令的计算机可读介质,包括:
用于在排队系统中接收从发送者子系统发送的消息组的指令,其中,每一消息组包含至少一条消息;
用于使用所述排队系统以预定的顺序存储所接收到的消息组的指令;
用于在所述排队系统中接收每一消息组的相关标识符的指令,其中,所述相关标识符用于关联消息组;
用于使用所述排队系统存储所接收的相关标识符的指令;以及
用于根据所述预定的顺序和所述相关标识符来发送所存储的消息组的指令。
17.如权利要求16所述的计算机可读介质,其特征在于,一GUID被用作所述相关标识符。
18.如权利要求16所述的计算机可读介质,其特征在于,所述预定的顺序是接收所述消息组的顺序。
19.如权利要求16所述的计算机可读介质,其特征在于,相关联组的最后一个消息组是在发送所述相关联组的任何存储的消息组之前接收的。
20.如权利要求16所述的计算机可读介质,其特征在于,还包括对由所述相关标识符关联的接收到的消息组锁定发送,以及一旦接收到由所述相关标识符关联的最后一个消息组,就对所接收的消息组解除锁定发送。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/026,501 US7502843B2 (en) | 2004-12-30 | 2004-12-30 | Server queuing system and method |
US11/026,501 | 2004-12-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1798111A true CN1798111A (zh) | 2006-07-05 |
CN1798111B CN1798111B (zh) | 2012-01-11 |
Family
ID=36097085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2005101287546A Expired - Fee Related CN1798111B (zh) | 2004-12-30 | 2005-11-30 | 服务器排队系统和方法 |
Country Status (7)
Country | Link |
---|---|
US (2) | US7502843B2 (zh) |
EP (1) | EP1696611B1 (zh) |
JP (1) | JP4993905B2 (zh) |
KR (1) | KR20060079078A (zh) |
CN (1) | CN1798111B (zh) |
AT (1) | ATE446633T1 (zh) |
DE (1) | DE602005017242D1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102414663A (zh) * | 2009-05-18 | 2012-04-11 | 阿玛得斯两合公司 | 用于管理报文排序的方法和系统 |
CN101678236B (zh) * | 2007-03-06 | 2012-10-31 | 诚恩环球公司 | 用于将动态内容引入合成环境中的分布式网络架构 |
CN107590072A (zh) * | 2017-08-30 | 2018-01-16 | 深圳乐信软件技术有限公司 | 一种应用开发和测试的方法和装置 |
CN108337326A (zh) * | 2011-03-11 | 2018-07-27 | 谷歌有限责任公司 | 机会性网络更新 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7421501B2 (en) * | 2005-02-04 | 2008-09-02 | Microsoft Corporation | Queued sessions for communicating correlated messages over a network |
JP4790377B2 (ja) * | 2005-11-07 | 2011-10-12 | 株式会社日立製作所 | ストレージサブシステムのボリューム複製方法 |
US20080052397A1 (en) * | 2006-08-24 | 2008-02-28 | Ramanathan Venkataraman | Future locking of resources |
US8898325B2 (en) * | 2007-03-06 | 2014-11-25 | Trion Worlds, Inc. | Apparatus, method, and computer readable media to perform transactions in association with participants interacting in a synthetic environment |
US7818426B2 (en) * | 2007-03-27 | 2010-10-19 | Oracle America, Inc. | Method and system for processing a message by a message provider |
US7921427B2 (en) * | 2007-03-27 | 2011-04-05 | Oracle America, Inc. | Method and system for processing messages in an application cluster |
US8954994B2 (en) * | 2007-04-23 | 2015-02-10 | Oracle International Corporation | System and method for message service with unit-of-order |
US9384159B2 (en) * | 2007-05-24 | 2016-07-05 | International Business Machines Corporation | Creating a checkpoint for a software partition in an asynchronous input/output environment |
US9021503B2 (en) * | 2007-11-16 | 2015-04-28 | Microsoft Technology Licensing, Llc | Coordinating application state and communication medium state |
US8505030B2 (en) * | 2007-11-16 | 2013-08-06 | Microsoft Corporation | Coordinating resources using a volatile network intermediary |
US8719841B2 (en) * | 2007-11-16 | 2014-05-06 | Microsoft Corporation | Dispatch mechanism for coordinating application and communication medium state |
US8220002B2 (en) * | 2008-01-25 | 2012-07-10 | Microsoft Corporation | Isolation of user-interactive components |
JP5206268B2 (ja) * | 2008-09-17 | 2013-06-12 | 富士通株式会社 | ルール作成プログラム、ルール作成方法及びルール作成装置 |
US8626863B2 (en) * | 2008-10-28 | 2014-01-07 | Trion Worlds, Inc. | Persistent synthetic environment message notification |
US8661073B2 (en) * | 2009-03-06 | 2014-02-25 | Trion Worlds, Inc. | Synthetic environment character data sharing |
US8657686B2 (en) * | 2009-03-06 | 2014-02-25 | Trion Worlds, Inc. | Synthetic environment character data sharing |
US8694585B2 (en) * | 2009-03-06 | 2014-04-08 | Trion Worlds, Inc. | Cross-interface communication |
US8214515B2 (en) * | 2009-06-01 | 2012-07-03 | Trion Worlds, Inc. | Web client data conversion for synthetic environment interaction |
US8301706B2 (en) | 2009-06-15 | 2012-10-30 | Microsoft Corporation | Routing of pooled messages via an intermediary |
US8549538B2 (en) * | 2010-03-18 | 2013-10-01 | Microsoft Corporation | Coordinating communication medium state for subtasks |
US8250234B2 (en) | 2010-04-26 | 2012-08-21 | Microsoft Corporation | Hierarchically disassembling messages |
US8775923B1 (en) * | 2011-09-26 | 2014-07-08 | Google Inc. | Web page restoration |
CN103428072B (zh) * | 2012-05-23 | 2017-03-08 | 北京大学 | 一种持久化消息的发布方法及系统 |
US9654408B2 (en) * | 2013-11-06 | 2017-05-16 | Amazon Technologies, Inc. | Strict queue ordering in a distributed system |
US9961034B2 (en) | 2015-06-01 | 2018-05-01 | International Business Machines Corporation | Prioritization of lock allocation |
US10382380B1 (en) | 2016-11-17 | 2019-08-13 | Amazon Technologies, Inc. | Workload management service for first-in first-out queues for network-accessible queuing and messaging services |
FR3067490B1 (fr) * | 2017-06-08 | 2023-04-28 | Amadeus Sas | TRAITEMENT DE MESSAGES MULTlNORMES |
WO2018224659A1 (en) * | 2017-06-08 | 2018-12-13 | Amadeus S.A.S. | Multi-standard message processing |
US10284515B2 (en) | 2017-06-08 | 2019-05-07 | Amadeus S.A.S. | Multi-standard message processing |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5261069A (en) * | 1990-08-13 | 1993-11-09 | Hewlett-Packard Company | Method of maintaining consistency of cached data in a database system |
US6481005B1 (en) * | 1993-12-20 | 2002-11-12 | Lucent Technologies Inc. | Event correlation feature for a telephone network operations support system |
JPH0830523A (ja) * | 1994-07-12 | 1996-02-02 | Hitachi Ltd | オンラインメッセージの通信方法 |
JPH09101901A (ja) * | 1995-10-06 | 1997-04-15 | N T T Data Tsushin Kk | マルチプロセスで動作するパーソナルコンピュータ上で行われるプロセス間のメッセージ通信方式及びメッセージ通信方法 |
GB2320112B (en) * | 1996-12-07 | 2001-07-25 | Ibm | High-availability computer server system |
US6178174B1 (en) * | 1997-08-26 | 2001-01-23 | International Business Machines Corporation | Optimistic, eager rendezvous transmission mode and combined rendezvous modes for message processing systems |
GB2330220B (en) * | 1997-10-07 | 2002-04-10 | Ibm | Access control for groups of related data items |
US6058389A (en) * | 1997-10-31 | 2000-05-02 | Oracle Corporation | Apparatus and method for message queuing in a database system |
US6240413B1 (en) * | 1997-12-22 | 2001-05-29 | Sun Microsystems, Inc. | Fine-grained consistency mechanism for optimistic concurrency control using lock groups |
JPH11306244A (ja) * | 1998-04-16 | 1999-11-05 | Hitachi Ltd | ワーク管理システム |
US6425017B1 (en) * | 1998-08-17 | 2002-07-23 | Microsoft Corporation | Queued method invocations on distributed component applications |
US6658485B1 (en) * | 1998-10-19 | 2003-12-02 | International Business Machines Corporation | Dynamic priority-based scheduling in a message queuing system |
US6606626B1 (en) * | 1998-10-20 | 2003-08-12 | Sybase, Inc. | Database system with lock manager enhancement for improving concurrency |
US6418438B1 (en) * | 1998-12-16 | 2002-07-09 | Microsoft Corporation | Dynamic scalable lock mechanism |
US6484172B1 (en) * | 1999-12-24 | 2002-11-19 | Electronics And Telecommunications Research Institute | Concurrency control method for high-dimensional index structure using latch and lock |
US7003781B1 (en) * | 2000-05-05 | 2006-02-21 | Bristol Technology Inc. | Method and apparatus for correlation of events in a distributed multi-system computing environment |
US7035852B2 (en) * | 2000-07-21 | 2006-04-25 | International Business Machines Corporation | Implementing a message queuing interface (MQI) indexed queue support that adds a key to the index on put commit |
US6598041B1 (en) * | 2000-09-07 | 2003-07-22 | International Business Machines Corporation | Method, system, and program for processing modifications to data in tables in a database system |
GB0028237D0 (en) * | 2000-11-18 | 2001-01-03 | Ibm | Method and apparatus for communication of message data |
US6850938B1 (en) * | 2001-02-08 | 2005-02-01 | Cisco Technology, Inc. | Method and apparatus providing optimistic locking of shared computer resources |
WO2002069575A1 (en) * | 2001-02-28 | 2002-09-06 | Gotham Networks, Inc. | Methods and apparatus for network routing device |
JP3738701B2 (ja) * | 2001-04-02 | 2006-01-25 | 日本電気株式会社 | トランザクション処理システムにおけるシステム設定方法 |
US7248593B2 (en) * | 2001-09-25 | 2007-07-24 | Intel Corporation | Method and apparatus for minimizing spinlocks and retaining packet order in systems utilizing multiple transmit queues |
US7039671B2 (en) * | 2001-11-30 | 2006-05-02 | Sonic Software Corporation | Dynamically routing messages between software application programs using named routing nodes and named message queues |
US7020684B2 (en) * | 2002-01-18 | 2006-03-28 | Bea Systems, Inc. | System and method for optimistic caching |
US7107283B2 (en) * | 2002-05-28 | 2006-09-12 | Kabushiki Kaisha Toshiba | Relational job queue |
US7124110B1 (en) * | 2002-07-15 | 2006-10-17 | Trading Technologies International Inc. | Method and apparatus for message flow and transaction queue management |
US20050158883A1 (en) * | 2003-03-05 | 2005-07-21 | Fujitsu Limited | Multilayered structure film and method of making the same |
JP4041002B2 (ja) * | 2003-03-24 | 2008-01-30 | 株式会社三菱東京Ufj銀行 | データベース更新処理システム、データベース更新のための更新データ入力方法、更新データ処理方法、およびプログラム |
GB2399980A (en) * | 2003-03-26 | 2004-09-29 | Zarlink Semiconductor Ltd | Packet buffer management |
CA2425033A1 (en) * | 2003-04-08 | 2004-10-08 | Ibm Canada Limited - Ibm Canada Limitee | Multi-level locking hierarchy in a database with multi-dimensional clustering |
US20050080759A1 (en) * | 2003-10-08 | 2005-04-14 | International Business Machines Corporation | Transparent interface to a messaging system from a database engine |
GB0328576D0 (en) * | 2003-12-10 | 2004-01-14 | Ibm | Method and apparatus for browsing a list of data items |
GB0328575D0 (en) * | 2003-12-10 | 2004-01-14 | Ibm | Method and apparatus for browsing a list of data items |
US8271681B2 (en) * | 2004-02-25 | 2012-09-18 | Teamon Systems, Inc. | Communications system using hierarchical queue structure for email message delivery and related methods |
US20060059257A1 (en) * | 2004-09-14 | 2006-03-16 | Jean-Francois Collard | Message queue tuning |
US7421501B2 (en) * | 2005-02-04 | 2008-09-02 | Microsoft Corporation | Queued sessions for communicating correlated messages over a network |
US7853956B2 (en) * | 2005-04-29 | 2010-12-14 | International Business Machines Corporation | Message system and method |
US7680793B2 (en) * | 2005-10-07 | 2010-03-16 | Oracle International Corporation | Commit-time ordered message queue supporting arbitrary read and dequeue patterns from multiple subscribers |
US8015256B2 (en) * | 2005-11-23 | 2011-09-06 | Medicalis Corp. | Method and apparatus for parallel sequencing of messages between disparate information systems |
-
2004
- 2004-12-30 US US11/026,501 patent/US7502843B2/en not_active Expired - Fee Related
-
2005
- 2005-10-31 US US11/263,005 patent/US7568009B2/en not_active Expired - Fee Related
- 2005-11-10 KR KR1020050107407A patent/KR20060079078A/ko active IP Right Grant
- 2005-11-30 CN CN2005101287546A patent/CN1798111B/zh not_active Expired - Fee Related
- 2005-12-06 JP JP2005352578A patent/JP4993905B2/ja not_active Expired - Fee Related
- 2005-12-08 EP EP05111831A patent/EP1696611B1/en not_active Not-in-force
- 2005-12-08 DE DE602005017242T patent/DE602005017242D1/de active Active
- 2005-12-08 AT AT05111831T patent/ATE446633T1/de not_active IP Right Cessation
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101678236B (zh) * | 2007-03-06 | 2012-10-31 | 诚恩环球公司 | 用于将动态内容引入合成环境中的分布式网络架构 |
CN102414663A (zh) * | 2009-05-18 | 2012-04-11 | 阿玛得斯两合公司 | 用于管理报文排序的方法和系统 |
CN102414663B (zh) * | 2009-05-18 | 2017-02-08 | 艾玛迪斯简易股份公司 | 用于管理报文排序的方法和系统 |
CN108337326A (zh) * | 2011-03-11 | 2018-07-27 | 谷歌有限责任公司 | 机会性网络更新 |
CN107590072A (zh) * | 2017-08-30 | 2018-01-16 | 深圳乐信软件技术有限公司 | 一种应用开发和测试的方法和装置 |
CN107590072B (zh) * | 2017-08-30 | 2020-08-18 | 深圳乐信软件技术有限公司 | 一种应用开发和测试的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
JP4993905B2 (ja) | 2012-08-08 |
ATE446633T1 (de) | 2009-11-15 |
DE602005017242D1 (de) | 2009-12-03 |
CN1798111B (zh) | 2012-01-11 |
KR20060079078A (ko) | 2006-07-05 |
US20060149865A1 (en) | 2006-07-06 |
EP1696611B1 (en) | 2009-10-21 |
EP1696611A1 (en) | 2006-08-30 |
US20060146848A1 (en) | 2006-07-06 |
US7502843B2 (en) | 2009-03-10 |
US7568009B2 (en) | 2009-07-28 |
JP2006190265A (ja) | 2006-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1798111A (zh) | 服务器排队系统和方法 | |
US9519884B2 (en) | Data driven dynamic workflow | |
CN1212583C (zh) | 信息处理方法、信息终端支持服务器以及协作系统 | |
CN1783132A (zh) | 通过工作流事务的批处理来同步运行库和应用状态 | |
US20170223071A1 (en) | Connecting a device to a meeting | |
CN1573701A (zh) | 分布式构建环境中的软件映像创建 | |
CN1509442A (zh) | 因特网和/或网站内容的自动管理 | |
CN1678994A (zh) | 用于提供访问用户界面信息的系统和方法 | |
CN1946075A (zh) | 确定消息的用户特定关联性得分的方法和系统 | |
CN1794230A (zh) | 以透明方式公开计算机生成文档中嵌套数据的方法和系统 | |
CN1609873A (zh) | 用于管理电子邮件和报警消息的方法,装置,以及用户界面 | |
CN1610308A (zh) | 一对多数据投影系统和方法 | |
MX2007014899A (es) | Mecanismo de concesion para busqueda. | |
CN100341281C (zh) | 一种在网络系统中实现任务管理的方法 | |
CN1811765A (zh) | 文字处理应用程序中的数据绑定 | |
CN1841362A (zh) | 用于处理电子表格的方法和系统 | |
US7430628B2 (en) | System and method for optimized allocation of shared processing resources | |
CN1298503A (zh) | 分布式系统中的动态查找服务 | |
CN1755633A (zh) | 用于电子表格链式计算的多线程处理的方法和系统 | |
CN1682186A (zh) | 技术无关的信息管理 | |
CN1684035A (zh) | 优先级绑定 | |
CN1591339A (zh) | 提供共享Web模块的系统和方法 | |
CN1300690C (zh) | 用于监视计算机系统中的资源的方法和系统 | |
US9875140B2 (en) | System, method, and apparatus for coordinating distributed electronic discovery processing | |
CN1659536A (zh) | 用于在便携设备中再现多媒体的系统 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120111 Termination date: 20121130 |