发布/订阅消息中介的制作方法

文档序号:7732973阅读:162来源:国知局
专利名称:发布/订阅消息中介的制作方法
技术领域
本发明涉及操作发布/订阅消息中介(broker)的方法、消息中介本身以及用于操 作发布/订阅消息中介的计算机可读介质上的计算机程序产品。
背景技术
发布/订阅(pub/sub)是异步消息收发范例(paradigm)。在pub/sub系统中,发 布者向消息中介发出消息,而订阅者向该中介注册订阅。在基于话题的系统中,将消息发布 至中介所管控的话题。基于话题的系统中的订阅者将接收向他们订阅的话题所发布的全 部消息,并且对话题的所有订阅者将接收相同的消息。Pub/sub是非常有价值的范例,每个 pub/sub消息按照消息本身的属性(通常是主题,有时是内容)进行路由。在每个消息到 达时,作为第一步,中介分析该消息并且确定正确的订阅者集合,并且第二步相应地分发消 息。系统是异步的。目前在发布订阅环境中,发布者可以向话题发布消息,订阅者可以接收 关于该话题的消息。在某些情况下,将发布和订阅二者从指定的话题重定向至另一话题将 是有益的。

发明内容
按照本发明的第一方面,提供一种操作发布/订阅消息中介的方法,包括从发布 者接收关于话题的消息;将该消息标识为消息序列的开始;向该话题的一个或多个已有订 阅者传送该消息;使新订阅者注册该话题;从发布者接收关于该话题的进一步消息;以及 向该话题的一个或多个已有订阅者传送所述进一步消息,但是不向已注册该话题的新订阅 者传送该进一步消息。按照本发明的第二方面,提供一种发布/订阅消息中介,该消息中介被安排为从 发布者接收关于话题的消息;将该消息标识为消息序列的开始;向该话题的一个或多个已 有订阅者传送该消息;使新订阅者注册该话题;从发布者接收关于该话题的进一步消息; 以及向该话题的一个或多个已有订阅者传送所述进一步消息,但是不向已注册该话题的新 订阅者传送该进一步消息。按照本发明的第三方面,提供一种计算机可读介质上的计算机程序产品,用于操 作发布/订阅消息中介,该产品包括用于以下的指令从发布者接收关于话题的消息;将该 消息标识为消息序列的开始;向该话题的一个或多个已有订阅者传送该消息;使新订阅者 注册该话题;从发布者接收关于该话题的进一步消息;以及向该话题的一个或多个已有订 阅者传送所述进一步消息,但是不向已注册该话题的新订阅者传送该进一步消息。根据优选实施方式,可以提供一种消息中介,其将操作话题,使得在该话题已经开 始了一个序列的情况下,新订阅者将不会接收来自该话题的消息。优选实施方式描述了可 以如何在无需客户端知识的情况下,将发布者和订阅者二者使用的话题重定向至一个或多 个不同的话题。这在发布必须全部接收才有意义的消息序列这一具体情况下将是有用的,也即,少接收一个消息都将不是有用的。考虑棋类游戏,其中发布者向特定话题发布游戏中的每 个移动。对于订阅者来说,在游戏的半途接收这些发布将没有任何意义,因为在没有接收到 先前消息(以便订阅者理解棋盘上所有棋子的当前位置)的情况下这是毫无意义的。有益地,在操作消息中介的方法中,将消息标识为消息序列的开始的步骤,包括 访问接收到的消息的内容,并且根据访问的消息内容将该消息标识为消息序列的开始。消 息中介必须识别新消息序列何时开始。一种易于实现的方式是在接收消息的内容中查看 消息内容中的显式或隐式标记,该标记指示该消息是新序列的开始。例如,发布者可以在消 息体内包括预定标志,向消息中介指示该消息是新序列的第一个消息。如果没有标志,消息 中介可以智能地配置为根据消息的内容来确定该消息是序列的开始。例如,在上文围绕棋 类游戏的移动来维持的话题的示例中,例如“l.e4”或者类似内容的存在将指示新的序列。 标识消息作为新序列的开始可以基于除消息内容之外的某些信息,例如,基于发布者的位 置或者发送消息的时间(可能与发送先前消息的时间有关)。优选地,操作消息中介的方法还包括接收关于话题的又一消息;将该又一消息 标识为消息序列的结束;以及向该话题的一个或多个已有订阅者以及向话题的新注册订 阅者传送所有将来的消息。消息中介还可以配置用于标识序列的结束;以及有效地终 止与序列条件相关联的特殊操作过程。一旦确定了结束,则所有订阅者返回相同的基点 (footing),并且将向所有订阅者(不论新老)发送关于该话题而接收的任何新消息。如果 接收到另一个开始新序列的消息,则过程可以从头开始。理想情况下,操作消息中介的方法还包括在将消息标识为消息序列的开始的步 骤之后,创建对应于该消息序列的新话题,并且使一个或多个已有订阅者订阅该新话题。这 继而可以包括对于关于该话题接收的所有将来消息,确定是发布关于所述话题还是关于 所述新话题的每个消息。这是消息中介可以实现新订阅者与已有消息序列的分离的一种方 式。消息中介创建对应于消息序列的新的子话题,并且使一个或多个已有订阅者订阅该新 话题。接收到的与该序列有关的任何新消息都向子话题发布而不向原话题发布。该话题的 任何新订阅者不订阅子话题。


现在将通过示例的方式参考附图来描述本发明的实施方式,其中图1是发布/订阅系统的示意图;图2是发布/订阅系统的另一示意图;图3是操作发布/订阅系统的消息中介的方法流程图;图4到图6是发布/订阅系统的第二实施方式的示意图。
具体实施例方式图1示出了发布/订阅系统的一个简单实施方式。该系统包括消息中介10、发布 者12和两个订阅者14。消息中介10实现于服务器处,可经由适当网络访问该服务器。发 布者12和订阅者14可以是能够连接到运行中介10的服务器的任何计算功能。发布者12 和订阅者14可以是台式计算机,或者例如移动电话或PDA之类的移动设备。将连接设备指 定为发布者或订阅者是一种逻辑状态,实际上任何连接设备在不同的时刻可以既是发布者
5又是和订阅者。中介10维护话题16的列表,在此示例中话题是第一话题Tl和第二话题T2。通过已知的接口,连接设备可以发现由中介10维护的话题,并且可以根据期望加入和离开话 题。连接设备还可以创建话题,这取决于其相对于中介10所维护的适当许可策略的状态。 订阅者Sl订阅话题Tl和话题T2 二者。认为中介10已经将订阅者14注册到这些话题16。 与此不同,订阅者S2仅仅是主题Tl的订阅者。一般地,话题16具有指定性,诸如“游戏”, 其是较为描述性的,并且查询话题14存在的设备还可以发现关于话题14的信息。图1示出了发布/订阅系统的非常简单的实施方式,实际上,中介10将存储非常 大量的话题及其订阅者。中介10所存储的每个订阅者具有地址。此地址(诸如,IP地址) 定义了去往相关订阅设备的路由。图1中示出了消息18,该消息中包括有关于与其相关的话题的信息。在简单系统 中,向中介10发送的每个消息18将包含报头和主体。报头将包括或者包含话题指定(例 如,Tl),并且主体将包括消息18的文本。中介10提供消息18去往相关订阅者14的路由。 在此情况下,由于消息18与话题Tl有关,则中介10将消息18路由至两个订阅者Sl和S2。 一般地,中介10并不保持消息18的任何副本,尽管这可以通过对中介10的管理性访问来 调整。例如,中介10可以存储关于每个话题16的最后的消息18,以便向话题16的任何新 订阅者发送该消息。图2示出了在新订阅者S3已经订阅话题Tl之后发布/订阅系统发生的状况。新 订阅者14将通过向中介10发送适当的管理消息,来向中介10注册其希望订阅话题Tl。从 图中可见,中介10已经在其列表16中关于该话题Tl注册了新订阅者。当从发布者12接 收到新消息18’时,中介10继而向该话题的所有当前订阅者(订阅者S1、S2和S3)分发该 消息18’。中介10所维护的列表16始终随加入和离开特定话题14的订阅者而改变。然而,标准消息收发中介的操作可以按照图3的流程图加以改进。这是因为在标 准配置中,新订阅者14在其订阅话题16之后,便同样可以开始接收消息18,这将导致新订 阅者14在其没有接收到构成序列较早部分的消息18时接收构成该序列一部分的消息18。 可以想到,后一消息内容可能扰乱后面的订阅者14,或者可能是无意义的。为了应对这一情 况,图1和图2的消息中介10被配置为按照图3的过程流程图来操作。操作发布/订阅中介的方法包括首先,在步骤Si,从发布者12接收关于话题16 的消息18 ;其次,在步骤S2,将消息18标识为消息序列的开始。中介10必须将接收的消息 18标识为新消息序列的开始。一种实现方案是中介10在接收的消息18中查看消息18内 容中的标记(其可能是显式的或隐式的),该标记指示该消息是新序列的开始。例如,消息18的原始发布者12可以按照预定的协议在消息的主体中包括标志,该 标志向消息中介10指示消息18是新消息序列的开始。如果没有标志,消息中介10可以 配置为根据消息的内容(通过一个或多个处理算法)来确定消息18是消息序列的第一个 消息。例如,如果话题16是围绕一个或多个棋类游戏而维护的,则例如“1. e4”或类似内容 的存在将指示新序列已经开始。可以基于消息18的内容之外的某些信息将消息标识为新序列的开始。例如,消息 中介10可以配置为表示特定的发布者12作为消息18的新序列的源,在这种情况下,步骤 S2中对消息18的标识基于发布者12的位置。中介10实现的其他可行方案可以涉及发送消息的时间,不论是作为绝对时间(一天中的第一个消息)或者相对时间(例如,关于发送 先前消息的时间)在接收到消息18之后,在步骤S3,消息中介10被安排为向话题16的(一个或多 个)已有订阅者14传送消息18。此时,中介10对接收到的消息的处理就像它是普通消息 18—样,并且将该消息18传送至已注册相应话题16的所有当前订阅者14。实际上,如果 没有新订阅者14在消息18的序列开始之后加入话题16,则消息中介10的操作不做改变。然而,在步骤S4,消息中介10向话题16注册新的订阅者14。一旦向话题16添加 了新的订阅者14,则在步骤S5,当从发布者12接收到关于话题16的进一步消息18时,消 息中介10被安排为向话题16的已有订阅者14、但是不向话题16的新注册订阅者14传送 (步骤S6)该进一步消息18。实际上,在新序列开始之后加入话题16的订阅者14将不会 接收到关于话题16的任何进一步消息18。只有已有订阅者14将接收到新消息18。中介10还被安排为接收关于话题16的又一消息18,以将该又一消息18标识为消 息序列的结束,并且向话题16的已有订阅者14以及向话题16的新注册订阅者14传送关 于话题16的所有将来的消息18。中介10实现关闭序列并且返回常规操作模式的过程。在 检测到序列的结束消息之后,在序列进行的同时向话题16注册的一个或多个新订阅者14 现在将会接收到向话题16发布的所有新消息18。中介10可以配置为实现已有订阅者与新订阅者分离的一种方式是在后台创建 新的子话题以管理序列。发布者12和订阅者14并不知道子话题的存在,但是在将消息18 标识为消息序列开始的步骤(步骤S2)之后,中介10被安排为创建对应于消息序列的新话 题,并且使一个或多个已有订阅者14订阅该新话题。参考图4描述这是如何工作的概述。在该图中,订阅者Sl已经订阅了名为“游戏” 的话题16。中介10对于订阅者Sl订阅话题16进行注册。发布者Pl继而向话题“游戏” 发布为游戏1的第一消息18。中介10接收发布的消息18,并将此消息18标识为消息18的 新序列的开始。实际上,中介10将创建新的子话题20,并且将把消息18发布在名为“游戏 /游戏1”的子话题20上。在发送发布的消息18之前,中介10为所有已有订阅者14(即, 订阅者Si)创建对于子话题20的订阅。订阅者Sl现在订阅话题“游戏”和子话题“游戏/ 游戏1”,并且接收针对游戏1的第一发布消息18。图5示出了在新订阅者S2订阅话题“游戏”时将发生的状况。中介10注册订阅 者S2对话题“游戏”的订阅,但是不注册对子话题20的订阅,当消息中介10注册新订阅者 S2时该子话题20已经存在和运行。当发布者Pl向话题“游戏”发布针对游戏1的进一步 消息18时,中介10接收发布的消息10,并且将其发布至话题“游戏/游戏1 ”。已有订阅者 (Si)接收到新消息18,但是新订阅者S2没有接收到。订阅者Sl接收到针对游戏1的第二 消息,订阅者S2没有接收到。可能发生消息序列的嵌套。例如,新消息序列可以在第一序列进行的同时作为新 的子话题20开始。这在图6中示出。在此示例中,发布者P2向话题“游戏”发布针对游戏 2的第一消息18。中介10接收发布的消息18,并且将消息18标识为消息18的新序列的 开始,并因此创建第二子话题20。中介10实际上将把消息发布在话题“游戏/游戏2”上。 在发送发布的消息18之前,中介创建所有已有订阅者(S卩,订阅者Sl和订阅者S2)对子话 题“游戏/游戏2”的订阅。订阅者Sl现在订阅话题“游戏”以及子话题“游戏/游戏1”和“游戏/游戏2”,而订阅者S2现在订阅话题“游戏”和子话题“游戏/游戏2”。订阅者Sl 和订阅者S2 二者都接收针对游戏2的第一消息18。
存在多种方式可以确定子话题20的名称。例如,其可以是可在中介10上管理的, 或者是基于消息18的指示新序列开始的时间戳(实际上,由于子话题20的名称不需要是 人类可读的,所以名称可以包括字符的任何配置)。存在多种实现和扩展的方式。注意,所 有情境都是以每个话题为基础的,不允许进行关于多个话题的消息序列(就任何客户端的 所知,显然中介使用不同的话题)。存在多种方式来确定消息序列的开始和结束。例如,可以通过发布者客户端ID来 分割消息序列。在这种情况下,发布者不知道消息序列,并且不需要对目前的发布者实现做 出改变。另一方法可以允许发布者对中介10进行API调用,以指定消息序列的开始和结束 (发布者每次可以管理单个消息序列)。第三种备选方案是允许发布者在消息报头中指定 序列ID,这允许发布者同时管理可能交错的多个消息序列。注意,中介可能要求用于获得唯 一序列ID的方法避免冲突。可以基于多个策略确定何时将订阅者从话题重定向到子话题。例如,订阅者订阅 所有随后创建的子话题,直到他们从根据其创建子话题的(主)话题退订。订阅者并不知 道任何重定向,并且实际上通过单个已知订阅对多个话题进行了订阅,即,不改变当前订阅 者实现。备选地,订阅者仅订阅下一新创建的子话题(此时,移除其主订阅),订阅者仍然不 知道任何重定向,即,不改变当前订阅者实现。订阅者可以选择上述之一作为API订阅调用 的一部分,在这种情况下,订阅者知道发生了话题重定向,但是不知道他们被重定向到的实 际话题。在本发明的使用子话题20的实施方式中,一旦已经创建了子话题20,订阅者14可 以从基础(base)话题16退订。这为订阅者14提供了有用的特征。例如,对消息中介10 操作的一个扩展将是使订阅者14知悉此特征,并且允许订阅者有效地指示消息中介10 “订阅基础话题上的第一事务,我不想了解未来的事务,只要第一事务”,这将是对中介10的 指令,即,只要创建了新的子话题20并且将他们向其该子话题20进行了自动订阅,便移除 他们对基础话题16的订阅。类似于现有发布/订阅系统,为了订阅者在断开之后保持其实际订阅,订阅必须 是可持续的。重新连接的非可持续订阅者将不会被重定向到任何先前的子话题。当订阅者 从主话题退订时,所有相关联的子话题订阅也必须被移除。注意,这些关联必须由中介来维 护。对于主要配置的其他扩展是可能的。例如,系统可以这样布置,使得发布者可以向 多个订阅者指明应当重定向到子话题。发布者指定一个(或η个)且只有一个(或η个) 订阅者接收给定的消息序列可能是有益的。
权利要求
一种操作发布/订阅消息中介的方法,包括从发布者接收关于话题的消息;将所述消息标识为消息序列的开始;向所述话题的一个或多个已有订阅者传送所述消息;响应于新订阅者注册所述话题以及从发布者接收到关于所述话题的、与所述序列相关联的进一步消息,向所述话题的所述一个或多个已有订阅者传送所述进一步消息,但是不向已注册所述话题的新订阅者传送所述进一步消息。
2.根据权利要求1所述的方法,其中将所述消息标识为消息序列的开始的步骤包括 访问所接收消息的内容,以及按照访问的消息内容来将所述消息标识为消息序列的开始。
3.根据权利要求1或2所述的方法,还包括接收关于所述话题的又一消息;将所述又 一消息标识为所述消息序列的结束;以及向所述话题的所述一个或多个已有订阅者以及已 注册所述话题的新订阅者传送关于所述话题的、与所述序列不相关联的每个进一步消息。
4.根据任一前述权利要求所述的方法,还包括响应于接收到与所述序列不相关联的 消息,创建与所述消息相关联且与所述序列不相关联的新话题;以及使所述新订阅者订阅 所述新话题。
5.根据任一前述权利要求所述的方法,还包括在将所述消息标识为消息序列的开始 的步骤之后,创建对应于所述消息序列的新话题,以及使所述一个或多个已有订阅者订阅 所述新话题。
6.根据权利要求4或5所述的方法,还包括针对接收到的关于所述话题的消息,确定 发布关于所述话题的消息还是关于所述新话题的消息。
7.一种发布/订阅消息中介,被安排为从发布者接收关于话题的消息;将所述消息标识为消息序列的开始;向所述话题的一个或多个已有订阅者传送所述消息;以及响应于新订阅者注册所述话题以及响应于从发布者接收到关于所述话题的、与所述序 列相关联的进一步消息,向所述话题的所述一个或多个已有订阅者传送所述进一步消息, 但是不向已注册所述话题的新订阅者传送所述进一步消息。
8.根据权利要求7所述的消息中介,其中所述消息中介被安排为在将所述消息标识 为消息序列的开始时,访问所接收消息的内容,以及按照访问的消息内容来将所述消息标 识为消息序列的开始。
9.根据权利要求7或8所述的消息中介,其中所述消息中介还被安排为接收关于所 述话题的又一消息;将所述又一消息标识为所述消息序列的结束;以及向所述话题的所述 一个或多个已有订阅者以及已注册所述话题的新订阅者传送关于所述话题的、与所述序列 不相关联的每个进一步消息。
10.根据权利要求7-9中任一项所述的消息中介,其中所述消息中介还被安排为响应 于接收到与所述序列不相关联的消息,创建与所述消息相关联且与所述序列不相关联的新 话题;以及使所述新订阅者订阅所述新话题。
11.根据权利要求7-10中任一项所述的消息中介,其中所述消息中介还被安排为在 将所述消息标识为消息序列的开始之后,创建对应于所述消息序列的新话题,以及使所述一个或多个已有订阅者订阅所述所述新话题。
12.根据权利要求10或11所述的消息中介,其中所述消息中介还被安排为针对接收 到的关于所述话题的消息,确定是发布关于所述话题的消息还是关于所述新话题的消息。
13.一种计算机可读介质上的计算机程序产品,用于操作发布/订阅消息中介,所述产 品包括用于以下的指令从发布者接收关于话题的消息;将所述消息标识为消息序列的开始;向所述话题的一个或多个已有订阅者传送所述消息;响应于新订阅者注册所述话题以及从发布者接收到关于所述话题的、与所述序列相关 联的进一步消息,向所述话题的所述一个或多个已有订阅者传送所述进一步消息,但是不 向已注册所述话题的新订阅者传送所述进一步消息。
14.根据权利要求13所述的计算机程序产品,其中用于将所述消息标识为消息序列的 开始的指令包括用于以下的指令访问所接收消息的内容,以及按照访问的消息内容来将 所述消息标识为消息序列的开始。
15.根据权利要求13或14所述的计算机程序产品,还包括用于以下的指令接收关于 所述话题的又一消息;将所述又一消息标识为所述消息序列的结束;以及向所述话题的所 述一个或多个已有订阅者以及已注册所述话题的新订阅者传送关于所述话题的、与所述序 列不相关联的每个进一步消息。
16.根据权利要求13-15中任一项所述的计算机程序产品,还包括用于以下的指令响 应于接收到与所述序列不相关联的消息,创建与所述消息相关联且与所述序列不相关联的 新话题;以及使所述新订阅者订阅所述新话题。
17.根据权利要求13-16中任一项所述的计算机程序产品,还包括用于以下的指令在 将所述消息标识为消息序列的开始的步骤之后,创建对应于所述消息序列的新话题,以及 使所述一个或多个已有订阅者订阅所述新话题。
18.根据权利要求16或17所述的计算机程序产品,还包括用于以下的指令针对接收 到的关于所述话题的消息,确定是发布关于所述话题的消息还是关于所述新话题的消息。
19.一种用于与发布/订阅消息中介结合使用的装置,包括接收组件,用于从发布者接收关于话题的消息;标识组件,用于将所述消息标识为消息序列的开始;第一传送器,用于向所述话题的一个或多个已有订阅者传送所述消息;以及第二传送器,用于响应于新订阅者注册所述话题以及响应于从发布者接收到关于所述 话题的、与所述序列相关联的进一步消息,向所述话题的所述一个或多个已有订阅者传送 所述进一步消息,但是不向已注册所述话题的新订阅者传送所述进一步消息。
全文摘要
一种操作发布/订阅消息中介的方法,包括从发布者接收关于话题的消息;将该消息标识为消息序列的开始;向该话题的一个或多个已有订阅者传送该消息;使新订阅者注册该话题;从发布者接收关于该话题的进一步消息;以及向该话题的一个或多个已有订阅者传送所述进一步消息,但是不向已注册该话题的新订阅者传送该进一步消息。一种实现方式是,在将消息标识为消息序列开始的步骤之后,消息中介创建对应于该消息序列的新子话题,并且使一个或多个已有订阅者订阅该新话题。接收到的任何与该序列有关的新消息被发布至子话题而不是原话题。该话题的任何新订阅者不订阅该子话题。
文档编号H04L29/08GK101960825SQ200980107504
公开日2011年1月26日 申请日期2009年2月25日 优先权日2008年3月5日
发明者G·E·琼斯, M·R·怀特黑德 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1