使用消息结构来发布/订阅消息传递的制作方法

文档序号:11450373阅读:311来源:国知局
使用消息结构来发布/订阅消息传递的制造方法与工艺

本发明涉及发布/订阅消息传递(messaging)的领域。特别地,本发明涉及使用消息结构来发布/订阅消息传递。



背景技术:

在许多情况下,计算机系统的用户可能希望一个应用或系统与另一应用或系统共享某些信息。例如,如果在诸如notes(notes是国际商业机器公司的商标)的客户端中撰写新电子邮件时,客户端可以收集其他应用中的在屏幕上显示的电子邮件地址,例如同事可能刚刚在sametime(sametime是国际商业机器公司的商标)中发送了某人的地址。目前,用户必须将此地址从sametime拷贝并粘贴到notes。

对于两个应用之间的一对一链接的简单情况,或甚至多对一链接的情况,这可以使用进程间通信轻松实现,或者通过使得接收应用公开某些类型的应用程序接口(api),使得它可以收听特定预定格式的输入。然而,当存在多对多链接时,并且当没有所需信息形式的预先约定的精确标准时,此系统变得难以管理。例如,在使用中存在许多正则表达式用于验证电子邮件地址。

为了解决这个问题以及潜在的其他问题,可以使用发布/订阅和基于队列的消息传递系统。发布/订阅消息传递系统是非常流行的,但是一个要求是主题名称是已知的,以便发布和订阅消息。

两个应用可以通过发布然后订阅一个约定的主题而进行通信,但这将要求两个应用的开发人员就主题名称达成一致。通常,在标准中商定了命名方案和惯例,但有时候一方可能希望发布或订阅特别(ad-hoc)主题。

因此,在本领域中需要解决上述问题。



技术实现要素:

根据本发明的第一方面,提供了一种使用在消息传递中介系统中执行的消息结构的用于发布/订阅消息传递的方法,包括:维护发布实体可以向其发布消息以及订阅实体可以向其订阅消息的多个列表;针对至少部分地符合公共消息结构的消息提供列表;通过将具有消息结构的消息或一个或多个消息的抽象表示与一个或者多个提供的列表进行比较,将来自发布实体或订阅实体的请求匹配到提供的所述列表;以及经由所述列表来共享至少部分地符合所述公共消息结构的消息。

所述方法可以包括:通过所述公共消息结构的抽象表示的元数据来定义列表。所述消息还包括:利用标识符标识列表,所述标识符被用于将列表引用至发布实体或者订阅实体。

所述匹配步骤将具有消息结构的消息或一个或多个消息的抽象表示与提供的所述列表的所述公共消息结构的抽象表示的元数据进行比较。

所述匹配步骤将具有消息结构的消息或一个或多个消息的抽象表示与提供的所述列表中的每个列表中的消息实例进行比较。

所述消息可以进一步包括:从发布实体接收用于发布具有消息结构的消息的请求;通过匹配至提供的列表的消息结构,来确定针对所述消息结构是否存在一个或多个列表;以及向所述发布实体提供用于所述一个或者多个列表的列表标识符,所述消息结构符合所述一个或者多个列表并且具有所述消息结构的消息可以被发布至所述一个或者多个列表。

所述消息可以包括:从订阅实体接收订阅具有消息结构的消息的请求;通过匹配至提供的列表的消息结构,来确定针对所述消息结构是否存在一个或多个列表;以及向所述订阅实体提供针对所述一个或者多个列表的列表标识符,具有所述消息结构的消息将从所述一个或者多个列表被订阅。

通过将具有消息结构的消息或一个或多个消息的抽象表示与一个或者多个提供的列表相比较来将来自发布实体或订阅实体的请求匹配至提供的所述列表可以包括:将具有部分匹配的请求匹配至一个或多个提供的列表。

所述方法可以包括:基于匹配请求的统计分析来适当地分离列表。

所述方法可以包括:将关于发布具有被发布的公共数据的列表合并至单一列表。

根据本发明的第二方面,提供一种包括消息传递中介系统的使用消息表达格式的用于发布/订阅消息传递的系统,包括:列表维护组件,用于维护发布实体可以向其发布消息以及订阅实体可以向其订阅消息的多个列表;列表提供组件,用于提供用于至少部分地符合公共消息结构的消息的列表;处理组件,用于通过将具有消息结构的消息或一个或多个消息的抽象表示与一个或者多个提供的列表进行比较,将来自发布实体或订阅实体的请求匹配到提供的所述列表;以及发布/订阅组件,用于经由所述列表来共享至少部分地符合所述公共消息结构的消息。

所述系统可以包括:元数据组件,用于通过所述公共消息结构的抽象表示的元数据来定义列表。

所述系统可以进一步包括:标识符组件,用于向列表提供标识符,所述标识符被用于将列表引用至发布实体或订阅实体。

所述处理组件将具有消息结构的消息或一个或多个消息的抽象表示与提供的所述列表的所述公共消息结构的抽象表示的元数据进行比较。

所述处理组件将具有消息结构的消息或一个或多个消息的抽象表示与提供的所述列表中的每个列表中的消息实例进行比较。

所述系统可以包括:发布实体请求组件,用于从发布实体接收用于发布具有消息结构的消息的请求,所述发布实体请求组件包括:使用所述处理组件,用于通过匹配至提供的列表的消息结构来确定针对所述消息结构是否存在一个或多个列表;以及所述发布实体请求组件向所述发布实体提供针对所述一个或者多个列表的列表标识符,所述消息结构符合所述一个或多个列表并且具有所述消息结构的消息可以被发布至所述一个或多个列表。

所述系统可以包括:创建组件,用于针对与提供的列表的消息结构不匹配的消息结构创建新列表。

所述系统可以包括:包括订阅实体请求组件,用于从订阅实体接收订阅具有消息结构的消息的请求,所述订阅实体请求组件包括:使用所述处理组件,用于通过匹配至提供的列表的消息结构来确定针对所述消息结构是否存在一个或多个列表;以及所述订阅实体请求组件向所述订阅实体提供针对所述一个或者多个列表的列表标识符,具有所述消息结构的消息将从所述一个或者多个列表被订阅。

所述处理组件用于通过将具有消息结构的消息或一个或多个消息的抽象表示与一个或者多个提供的列表进行比较,将来自发布实体或订阅实体的请求匹配到提供的所述列表包括:将具有部分匹配的请求匹配至一个或多个提供的列表。

所述系统可以包括:分离组件,用于基于匹配请求的统计分析来适当地分离列表。

所述系统可以包括:合并组件,用于将关于发布具有被发布的公共数据的列表合并至单一列表。

根据本发明的第三方面,提供一种包括软件代码部分的存储在计算机可读介质上并可加载到数字计算机的内部存储器中的计算机程序,当所述程序在计算机上运行时,用于执行本发明第一方面的方法步骤。

根据本发明的第四方面,提供了基本上如参考附图所描述的方法。

根据本发明的第五方面,提供了一种基本上如参考附图所描述的系统。

本发明的所描述的方面提供了基于正被共享的数据的结构来实现数据共享的优点。

附图说明

在说明书的结论部分中特别指出并明确要求保护作为本发明的主题。可以通过参考随附附图的以下详细描述而最佳地理解本发明及其操作的组织和方法以及其对象、特征和优点。

现在将仅通过举例的方式,参考以下附图来描述本发明的优选实施例,其中:

图1是根据本发明的系统的示例性实施例的示意图;

图2a是根据本发明的方法的一个方面的示例性实施例的流程图;

图2b是根据本发明的方法的一个方面的示例实施例的流程图;

图3是根据本发明的方法的示例性实施例的流程图;

图4是根据本发明的系统的示例性实施例的框图;

图5是可以实现本发明的计算机系统的实施例的框图;以及

图6a和6b是示出本发明的示例性实施例的示意图。

应当理解,为了说明的简单和清楚,附图中所示的元件未必按比例绘制。例如,为了清楚起见,某些元件的尺寸可能相对于其他元件而被夸大。此外,在认为适当的情况下,可以在附图中重复使用参考编号以指示对应或类似的特征。

具体实施方式

在下面的详细描述中,阐述了许多具体细节以便提供对本发明的透彻理解。然而,本领域技术人员将理解,可以在没有这些具体细节的情况下实践本发明。在其他情况下,为避免模糊本发明,没有详细描述公知的方法、程序和组件。

所描述的方法和系统允许应用或系统通过仅知道数据的结构而不是该数据的主题名称来共享信息。对于两个应用或系统,对于一个命名方案而言是相对容易的。然而,对于全部共享相同数据类型的许多应用,全部应用都同意一个名称是困难的。因此,随着更多的系统基于数据类型或结构订阅或发布主题,概念变得越来越强大。

所描述的方法和系统在运行时提供发布/订阅主题的协商,以用于共享特定结构的信息。

发布实体和订阅实体之间的中介系统可以以如下形式提供:队列管理器,消息传递中介件系统,或可以从发布者接收项目以供分发给订阅者的其他系统。中介系统维护由发布实体发布、以及由订阅实体通过订阅(subscription)获得哪些项目(如消息)的项目列表。例如,列表可以是基于消息的公共主题的消息队列。

在所描述的发布/订阅消息传递系统中,项目可以是由具有不同结构的数据形成的消息。在描述的方法和系统中,列表主题是基于消息中的数据的结构,导致包括具有公共或重叠消息结构的项目的列表。

在所描述的方法和系统中,列表可以具有名称或标识符(id),以及作为其包含的数据的抽象表示的一些附加元数据。在一个实施例中,该抽象表示可以是名称/id本身,但同样地名称/id可以简单地是随机哈希或数字。

抽象表示定义要被发布和订阅的项目的数据的结构。抽象表示可以是正则表达式,搜索模式或查询语言表达式。可以使用许多不同的语言,这些语言可以描述是/否,布尔响应类型查询。查询语言可以包括但不限于xpath,xquery,sql及其变体,xslt等。抽象表示可以用于匹配文本的字符串,其他语法或诸如xml的数据表示。

发布实体可以查询中介系统以确定其是否具有与消息的结构匹配或部分匹配的列表。如果答案是肯定的,则该发布实体可以开始向该列表发布消息。如果答案是否定的,则可以为该发布实体创建新的列表,以便开始向其发布此结构的消息。在一个实施例中,代替查看每个列表的元数据以返回匹配列表的是,中介系统可以查看遍历每个列表中的每个项目,以找到与发布实体提供的消息的结构相匹配的列表。

订阅实体可以查询中介系统以确定其是否具有与消息结构匹配或部分匹配的任何列表。然后,中介系统可以查看每个列表的项目(即,不仅仅是列表的元数据),以找到具有与由订阅实体给出的消息结构相匹配的项目的列表。订阅实体然后可以订阅具有匹配或部分匹配的项目的列表。

提供了所描述的方法和系统的各种实施例。

在一个实施例中,使用数据结构的抽象表示来定义数据结构,并将发布或订阅请求与出站列表(exitinglist)进行匹配。列表可以具有作为列表的元数据(例如作为列表的属性)提供的数据结构的抽象表示。在一种情况下,抽象表示可以作为列表的名称来提供。

发布或订阅请求可以定义抽象表示(其可以与属性或元数据的抽象表示形式的不同),其与以下中的任何一个或多个进行比较:列表的名称,列表的元数据,或列表内的消息。

在另一个实施例中,发布或订阅请求可以通过提供消息本身来定义消息结构。消息可以与列表的消息的结构的抽象表示或列表中的消息进行比较。

用于消息的公共数据结构的列表可以随着发布和订阅请求被匹配而演变,包括分离和合并列表以更好地覆盖数据结构的形式。

参考图1,示意图100示出了由多个发布实体111-113和多个订阅实体121-123形成的发布/订阅架构,该架构具有用于管理发布/订阅处理的中介系统130。应当理解,发布实体也可以是订阅实体,并且订阅实体也可以是发布实体,并且为了简单起见,这些类型的实体被单独地示出。

中介系统130包括至少一个主题列表131,其中可以提供多个项目或对项目141的引用。主题列表131可以具有属性132,其包括定义消息结构至少部分地符合的消息结构的抽象表示133的元数据。

中介系统130还可以包括处理组件150,用于处理发布或订阅请求并且对于给定的项目的结构而匹配至适当的列表131。具体地,处理组件150可以将项目匹配至项目的结构的抽象表示。下面给出处理组件150的进一步的细节。

参考图2a,流程图200示出了在发布实体111和在中介系统130处执行的方法的示例实施例。

发布实体111向中介系统130发送201请求,指定其希望发布的消息的结构。消息结构可以作为消息结构的抽象表示而被提供,或者可以是消息结构形式的消息的样本。

在中介系统130处接收202请求,并且执行匹配搜索203以将该请求匹配至或部分地匹配至具有相同或相似的项目的消息结构的一个或多个现有列表。这可以通过如下来匹配:主题列表的名称,与列表中的项目的抽象表示相关的元数据或列表中的项目本身。

确定204针对匹配或部分匹配于在请求中定义的消息结构的消息结构是否存在一个或多个列表。如果确定不存在列表,则可以在中介系统130处创建列表205。

对于中介系统130可以匹配203到现有列表的简单消息,消息结构形式的消息的示例可以由发布实体发送201。然而,如果对于消息的样本不存在匹配的主题,则中介系统130可以创建列表,并且向预期的发布实体111询问抽象表达。这可以在中介系统130和发布实体111之间的开放握手中进行。

如果确定已经存在一个或多个列表或者已经创建了新的列表205,则可以将列表名称或其他标识符206发送到发布实体111。

发布实体111可以接收207列表名称。发布实体111可以存储208用于消息结构的列表名称的引用,例如使用抽象表示或消息结构的名称。发布实体111可以随着这个消息结构的项目的出现将其发布209到该列表中。

参考图2b,流程图250示出了在订阅实体121和中介系统130处执行的方法的示例实施例。

订阅实体121可以向中介系统130发送251请求,包括对消息结构的引用,例如抽象表示,消息结构的名称或消息结构形式的样本项目。请求可以请求与消息结构匹配或部分匹配的列表。

中介系统130可以接收252请求,并在中介系统130处执行列表的匹配搜索253,以将该请求匹配或部分匹配至具有相同或相似项目的消息结构的一个或多个现有列表。这可以通过如下来匹配:主题列表的名称,与列表中的项目的抽象表示相关的元数据,或列表中的项目本身。

如果对于与请求中定义的消息结构匹配或部分匹配的消息结构存在一个或多个列表,则可以确定254。

存在可以实现的各种可能的“匹配质量”,包括以下内容:查看每个列表的每个项目,以确保列表中的所有项目与由订阅实体给出的表达式匹配;查看列表中的所有项目,直到找到匹配;以及(出于性能考虑),只看列表中的第一个项目。

如果确定254实质上没有与请求的消息结构相匹配的列表,则可以向订阅实体发送255通知,以将其告知订阅实体。如果确定254存在与消息结构相匹配的列表,则将列表名称发送256到订阅实体121。

订阅实体121可以使用列表名称来订阅257列表中的一个或多个列表。

当新项目被发布到订阅实体121所订阅的列表时,由中介系统130将该项目推送到订阅实体121。可选地,当新项目被推送到订阅实体时,订阅实体可以进行自己的过滤以确保正确性。

参考图3,流程图300示出了由中介系统130执行的所描述方法的示例实施例。

中介系统130可以维护301发布实体可以向其发布消息以及订阅实体可以向其订阅消息的多个列表,这可以包括针对至少部分地符合公共消息结构的消息提供302列表。提供302列表可以包括为列表定义名称或id,以及还以列表被提供的消息结构的抽象表示形式为列表定义元数据。抽象表示可以采取不同的形式,例如正则表达式,搜索模式,诸如xpath表达式的查询语言表达式等。抽象表示可以根据模式,数据类型来定义消息的结构,格式,类型等。

在正则表达式的示例中,字符被理解为具有特殊含义的元字符或具有字面含义的常规字符。同时,字符可用于标识给定图案或结构的纹理材料。在查询语言表达的另一个例子中,使用语法来导航数据项。

可以从发布实体或订阅实体接收303请求,该发布实体或订阅实体针对请求中指定的消息结构的消息而请求将被发布至的或者订阅的列表的详细信息。请求可以包括消息结构的抽象表示,或者可以包括消息结构形式的消息的样本,或者可以包括消息结构的名称。

匹配304是通过消息结构的现有列表而从请求的消息结构中执行的。该匹配可以以各种方式进行。在一个实施例中,在匹配请求中指定的消息结构可以与列表中的个体项目匹配。在另一个实施例中,匹配在请求中指定的消息结构的抽象表示可以与作为列表的元数据提供的列表的消息结构的抽象表示相匹配。

匹配可以包括将请求部分地匹配至列表。在一个实施例中,中介系统130可以浏览列表项目以获得在“部分匹配”情况下匹配的一部分数据。附加地或替代地,可以提供用于从部分匹配中过滤不合适的数据的过滤器。

如果发布实体的请求没有导致匹配或部分匹配列表,则可以为请求的消息结构创建305新的列表。

中介系统130可以向发布实体和订阅实体提供它们针对所请求的消息结构而应该发布或订阅的列表的名称或id。

可以向订阅实体返回精确地或部分地匹配于模式的多个主题的订阅。这可以对订户透明地完成,并且在中介系统130处进行管理。

可以通过向针对消息结构的一个或多个标识的列表发布消息以及订阅一个或多个标识的列表,来将消息共享306。

列表可以通过合并和分离来演变,以适应由发布实体和订阅实体在请求中定义的消息结构。

如果主题被确定为未达到定义的阈值(即,<50%的数据匹配),则可以移除订阅。备选地,中介系统可以具有基于模式匹配的统计分析适当地分离主题的逻辑。

在发布时,可以标识“部分匹配”,并且可以将具有公共数据的重叠模式合并以使用相同的主题。

参考图4,框图示出了中介系统130的示例实施例。如图1所描述的中介系统130管理在发布实体和订阅实体之间的发布/订阅处理。

中介系统130包括至少一个主题列表131,其中可以提供多个项目或对项目141的引用。主题列表131可以具有属性132,其包括定义列表中的项目至少部分地符合的消息结构的抽象表示133的元数据。

中介系统130包括列表维护组件401,用于维护发布实体可以向其发布消息以及订阅实体可以向其订阅消息的多个列表。列表提供组件402针对至少部分地符合公共消息结构的消息提供列表。列表提供组件402可以包括:标识符组件404,用于针对列表提供名称或标识符;和元数据组件403,用于针对公共消息结构的抽象表示的列表提供元数据。

中介组件130可以包括处理组件150,用于将来自发布实体或订阅实体的请求匹配至一个或多个所提供的列表。处理组件150可以包括匹配组件413,用于将具有一个或多个消息的抽象表示或消息结构的消息比较和匹配至所提供的列表。

处理组件150包括:发布实体请求组件411,用于处理来自发布实体的请求。处理组件150还可以包括订阅实体请求组件412,用于处理来自订阅实体的请求。

处理组件150还可以包括分离组件414和合并组件415,用于基于来自发布实体和订阅实体的请求的消息结构来演进列表。

发布/订阅组件410经由列表共享至少部分地符合公共消息结构的消息。

参考图5,用于实现本发明的方面的示例性系统包括适于存储和/或执行程序代码的数据处理系统500,其包括通过总线系统503直接或间接耦合到存储器元件的至少一个处理器501。存储器元件可以包括在实际执行程序代码期间采用的本地存储器,块(bulk)存储器和高速缓存存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从块存储器检索代码的次数。

存储器元件可以包括以只读存储器(rom)504和随机存取存储器(ram)505的形式的系统存储器502。基本输入/输出系统(bios)506可以存储在rom504中。软件507可以存储在包括诸如操作系统软件509的系统软件508的ram505中。软件应用510也可以存储在ram505中。

系统500还可以包括主存储装置511,例如磁性硬盘驱动器和辅助存储装置512,例如磁盘驱动器和光盘驱动器。驱动器及其相关联的计算机可读介质为系统500提供计算机可执行指令,数据结构,程序模块和其他数据的非易失性存储。软件应用也可以存储在主存储装置511和辅存储装置512以及系统存储器502上。

计算系统500可以在网络环境中使用经由网络适配器516使用到一个或多个远程计算机的逻辑连接来操作。

输入/输出设备513可以直接或通过中间i/o控制器耦合到系统。用户可以通过诸如键盘,指示设备或其他输入设备(例如,麦克风,操纵杆,游戏垫,卫星盘,扫描仪等)的输入设备将命令和信息输入到系统500中。输出设备可以包括扬声器,打印机等。显示设备514还经由诸如视频适配器515的接口连接到系统总线503。

参考图6a,示意图600示出了示出所描述的方法的第一示例实施例,其中消息结构由电子邮件地址的正则表达式的形式的抽象表达式定义。

发布实体111请求601发布具有由用于“[^@]+@[^@]+”形式的电子邮件地址的正则表达式定义的消息结构的消息。

中介系统130可以利用由发布实体111的“[^@]+@[^@]+”提供的正则表达式的元数据,来定义602列表“主题c”。中介系统130可以返回603列表“主题c”的名称/id以将这些消息发布。

例如,如果诸如sametime应用之类的应用想要发布可在其窗口中读入的电子邮件地址,则该应用可能希望将其发布到匹配电子邮件地址的此格式的列表中。如果列表已经存在(可能是sametime的另一个实例已经运行),则列表名称将被返回;否则将创建列表,并将其id返回给sametime应用。

然后,发布实体111可以将该消息结构的消息604发布到所标识的列表“主题c”。

诸如notes应用的订阅实体121可能希望从系统中的其他应用中拉入(pullin)电子邮件地址。

订阅实体121询问611中介系统130:它是否具有匹配于正则表达式.+?@[^.]+\.(com|net|org)的项目的任何列表,notes开发人员输入该正则表达式以匹配电子元件地址。应该注意的是,这与在发布实体的请求中使用的上述正则表达式不同。

中介系统130通过与其所拥有的列表进行比较来执行匹配612,并且找到用于发布实体111正在发布电子邮件地址到的“主题c”602的列表。此列表中的至少有一个项目与订阅实体的开发人员已经提供的表达式匹配。

中介系统130确认613存在具有匹配的项目的列表,并且使得订阅实体121订阅该列表。

稍后,发布实体(例如sametime应用)对“主题c”的列表发布电子邮件,并且因此其被中介系统推送到订阅实体(例如notes应用)。订阅实体现在可以根据其需要使用这个电子邮件地址信息,例如,当用户在撰写电子邮件时通过将其推送到当用户开始在“to”字段中键入电子邮件地址时使用的内部地址堆栈。可选地,订阅实体可以在此处执行额外的过滤检查以确保一致性。

参考图6b,示意图650示出了所描述的方法的第二示例实施例,其中以xpath表达式的形式的抽象表示来定义消息结构。

发布实体111请求651发布具有由“/body/status=success”形式的xpath表达式定义的消息结构的消息。

中介系统130可以利用由发布实体111的“/body/status=success”提供的xpath表达式的元数据来细化或定义652列表“主题a”。可以存在其他列表653,例如具有xpath表达式“/body/severity=severe”的元数据的“主题b”。中介系统130可以返回653将这些消息发布至列表“主题a”的名称/id。

然后,发布实体111可以将该消息结构的消息发布654到所标识的列表“主题a”。

订阅实体121可能想要拉入“/body/status=success”形式的消息。

订阅实体121向中介系统130询问661:其是否具有与xpath表达式“/body/status=success”匹配的项目的任何列表。

中介系统130通过将xpath表达式与其所拥有的列表进行比较来匹配,并且找到发布实体111正在发布到的“主题a”652的列表。

中介系统130确认663存在具有匹配的项目的列表,并且使得订阅实体121订阅该列表。

中介系统130可以查找不仅匹配精确(全集)而且将包括部分匹配的主题。例如,包含用于“/body/status=[success|failure]”的数据的主题将包含所有匹配成功和失败消息的数据,包括例如“/body/status=success”。

现在提供所描述的方法和系统的其他方面和变形。

发布实体和订阅实体不需要知道任何内部队列/主题/命名约定等。他们只是详细说明他们正在发布什么类型的数据以及他们感兴趣的是什么类型的数据。其余的可以由中介系统对于发布实体和订阅实体透明地实现。

在一个方面,可以将对多个主题的订阅返回到订阅实体,该多个主题精确地匹配所提供的模式或者作为其子集。这可以对订阅实体透明地进行。

如果订户请求某物,则中介系统可以遍历查看列表中的每个项目,并且仅当每个项目匹配时才将其作为订阅列表返回;或者只是查看每个列表中的第一个项目,如果匹配,则订阅该列表;或遍历查看整个列表,但一旦找到匹配就停止,并订阅该列表。

此外,中介系统可以抽象出订阅,即经过上述步骤之后,可以发现与订阅者所要求的相匹配的三个主题。在这一点上,可以创建新的“虚拟主题”,其具有被映射到找到的三个主题的订阅者所要求的元数据中的抽象表示。订阅实体只会被告知一个主题匹配,但在表面下三个主题处于匹配中,并且中介系统正在处理此转换。

在另一方面,中介系统可以浏览列表数据以确定列表数据在“部分匹配”中将匹配的比例。

订阅实体可以说“我对模式x...有趣”。中介系统可能会回答“我有一个主题匹配于模式x,但还有一个主题匹配于模式y,其匹配于模式x所匹配的数据的交集...”。

中介系统可以对匹配于模式y的数据进行采样,以评估数据与订阅者的模式匹配的可能性,并且如果满足给定阈值,则可以做出决定是否还使得该实体对其进行订阅。

(在这种情况下)订阅是这两个主题的并集。过滤器(如下所述)可以过滤掉没有精确匹配的数据。如果以后中介系统看到该订阅者感兴趣的所有项目都是来自模式x而不是模式y主题,则它可以从其订阅主题中丢弃模式y。

在另一方面,过滤器可以在中介系统或订阅实体上处理消息数据,以从不匹配的“部分匹配”中过滤掉数据。

如果订阅实体要求主题a,但允许部分匹配,则它可能仅对2000年之前的年份感兴趣,但是被订阅了一般(年份)主题a。在这一点上,订阅实体或中介系统本身可以实现额外的过滤器,以便只从与订阅实体感兴趣的特定项目相匹配的主题推送项目。

例如,订阅实体请求匹配“年份<2000”的项目。中介系统知道包含年份的主题,因此,使得订阅实体订阅该主题,并在前端添加过滤器(仅针对该特定订阅实体)。每当从该主题推送项目到该主题的所有订阅实体时,首先为该特定情况调用该过滤器,并且如果正在被推送的项目与“<2000”不匹配,则不会被传递至该特定订阅实体。

备选地,对于可能不希望信任从中介系统接收到的一切的订阅实体,过滤器的处理可以在订阅实体本身的部分上进行。

在另一方面,如果确定主题未达到部分匹配的定义的阈值(即,<数据的50%的匹配),则可以去除订阅。

假设订阅实体订阅主题a。在稍后的时间点上,在越来越多的事物从发布实体被推送到该主题之后,发现该主题中仅有20%的项目是订阅实体实际上感兴趣的实际上想知道的。订阅实体可以可选地在对话的他们的一侧添加过滤器,以便在进行其处理之前执行最终检查。然而,为了节省订阅实体的一些时间,中介系统可以简单地将其订阅从该主题中移除,因为其对于订阅变得不那么有趣(例如,低于50%的定义的阈值...)。

备选地,中介系统可以具有基于模式匹配的统计分析来适当地分离主题的逻辑。

中介系统可以知道订阅者仅对项目的某些子集感兴趣,代替仅从该主题取消订阅它们,中介系统可以将主题分成两部分,并使得订阅者订阅其实际感兴趣的一半。再次,这可以全部对用户透明地进行。

在另一方面,在发布时可以标识“部分匹配”,并且可以将具有公共数据的重叠模式合并以使用相同的主题。

假设发布实体a正在发布到主题a,并将实体b正在发布到主题b:

·主题a-199119921993

·主题b-2012204519341249

对于4位的年份形式的可能相同的数据集存在两个单独的主题。可能是发布实体a仅要求[1-9]{4},其匹配主题a而不是主题b(或者为其创建的主题a)。然而,发布实体a也部分匹配主题b(只是不具有零数字的年份)。在这种情况下,中介系统在其寻找4位数的年份时可能使得一个周期性的任务运行,如果发现只包含这些年份的主题,则中介系统可以将它们合并在一起以节省存储空间,同时告知发布实体a和b而以替代地发布到新的合并的主题c。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现

在不脱离本发明的范围的情况下,可以对前述进行改进和修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1