消息匹配背景技术
诸如新闻、股票报价、用户消息等的消息可以由该消息的一个或多个接受者和/或
订阅者接收。例如,一个或多个订阅者订阅所期望的消息流。订阅者常常必须订阅预定消息
流的全部消息。例如,消息通信基础架构配置为包括预定义消息流/频道/特定消息主题的
分组/类型/种类。预定消息组/流的订阅者将总是常常接收到该分组的全部消息,无论该订
阅者是否期望接收该分组的全部消息。因此,消息订阅者/接受者常常不能仅订阅该订阅
者/接受者期望的特定消息主题/类型/种类,因为所期望的分组不存在,或者现存的分组太
宽泛或具体。因此,存在对以更大的灵活性向(多个)所期望接受者发送和接收消息的更好
的方式的需要。
附图说明
本发明的各种实施例在以下详细描述和附图中公开。
图1是示出用于分发消息的系统的实施例的方框图。
图2是示出用于处理消息内容匹配器的过程的实施例的流程图。
图3是示出用于处理消息以确定该消息是否匹配内容匹配器的过程的实施例的流
程图。
具体实施方式
本发明可以以许多方式实施,包括作为过程;设备;系统;物质组成;计算机可读存
储介质上体现的计算机程序产品;和/或处理器,诸如配置为执行存储在耦接于处理器的存
储器上和/或由耦接于处理器的存储器提供的指令的处理器。在本说明书中,这些实施方
式,或者本发明可以采取的任何其他形式可以称为技术。一般地,在本发明的范围内,所公
开的过程的步骤的顺序可以改变。除非另外声明,诸如描述为配置为执行任务的处理器或
者存储器的组件可以实施为暂时配置为在给定时间执行该任务的通用组件,或者制造为执
行该任务的特定组件。如在此使用的,术语“处理器”指的是配置为处理诸如计算机程序指
令的数据的一个或多个装置、电路、和/或处理核心。
以下连同示出本发明原理的附图提供对于本发明的一个或多个实施例的详细描
述。结合这样的实施例来描述本发明,但本发明不限于任何实施例。本发明的范围仅由权利
要求限定并且本发明包括各种替代、修改和等同物。在以下描述中阐述了许多具体细节以
便提供对于本发明的彻底理解。出于示例目的而提供这些细节并且在没有这些具体细节中
的一些或全部的情况下,本发明可以根据权利要求来实践。出于清楚目的,与本发明有关的
技术领域中已知的技术材料未详细描述,使得本发明不被无必要地模糊。
公开了处理消息。在一些实施例中,针对由可应用于消息的一个或多个内容匹配
器标识的一个或多个字段的每个唯一组,生成与一个或多个字段的组相对应的编译的消
息。例如,分发给一个或多个接受者的消息被接收。所接收的消息被处理以确定其是否包括
限定为一个或多个订阅者感兴趣的内容。内容匹配器标识相关联的消息订阅者的感兴趣内
容。通过将消息转换为与内容匹配器相关联的编译消息格式,可以高效地确定该消息是否
匹配一个或多个内容匹配器。确定编译的消息中的一个或多个是否匹配可应用于该消息的
内容匹配器中的一个或多个。在一些实施例中,如果找到匹配的内容匹配器,则将该消息提
供给与所匹配的内容匹配器相关联的一个或多个订阅者。
图1是示出用于分发消息的系统的实施例的方框图。访问点102经由网络108连接
至消息提供者104以及消息订阅者106。消息提供者104发送消息以提供给一个或多个消息
订阅者。例如,消息提供者104将消息发送至访问点102以进行分发,并且访问点102将消息
分发至消息的一个或多个订阅者(例如消息订阅者106)。在一些实施例中,该消息分发至已
经订阅了针对该消息标识的消息主题的所有订阅者(例如消息订阅者106)。例如,消息以来
自可能的消息主题的预定列表的主题进行标识。在一些实施例中,消息分发给已经订阅了
由消息提供者104提供的消息的所有订阅者。在一些实施例中,消息分发给由该消息指定的
所有订阅者。
在一些实施例中,消息分发给已经订阅了包括在该消息中的一个或多个内容值的
所有订阅者。例如,内容匹配器标识相关联的消息订阅者的感兴趣内容。通过将该消息转换
为与内容匹配器相关联的编译消息格式,可以高效地确定该消息是否匹配一个或多个内容
匹配器。确定编译的消息中的一个或多个是否匹配可应用于该消息的内容匹配器中的一个
或多个。如果找到匹配的内容匹配器,则将该消息提供给与所匹配的内容匹配器相关联的
一个或多个订阅者(例如消息订阅者106)。
在一些实施例中,消息提供者104的系统还可以配置为接收一个或多个消息。例
如,接收自另一消息提供者的消息由访问点102提供给消息提供者104。在一些实施例中,消
息订阅者106配置为发送消息。例如,消息订阅者106将消息提供给访问点102,以允许访问
点102将该消息分发给(多个)可应用的目的地。在各种实施例中,消息提供者104和/或消息
订阅者106包括基于C和/或JAVA编程语言的桌面和/或服务器客户端。在一些实施例中,消
息提供者104和/或消息订阅者106包括移动和/或基于web的客户端。消息提供者104和/或
消息订阅者106的示例包括服务器、台式计算机、移动计算机、移动电话、平板计算机或任何
其他类型的计算机。在一些实施例中,访问点102(例如包括服务器)执行消息格式之间的翻
译。例如,以第一格式(例如消息发送者的专有格式)接收的消息可以转换为第二消息格式
(例如JavaScript对象标记格式),并且反之亦然(例如双向转换),以用于处理和/或与消息
接受者的格式兼容。
图1中示出的组件可以以一个或多个计算机、服务器、存储装置、联网组件和/或虚
拟组件/网络来实施。例如,图1中示出的任何数量的组件可以包括在相同装置中。网络108
可以包括以下中的一个或多个:直接或间接物理通信连接、移动通信网络、因特网、内部网、
局域网、广域网、存储区域网以及将两个或更多个系统、组件或存储装置连接在一起的任意
其他形式。可以存在其他通信路径并且图1的示例已经简化以清楚示出该示例。虽然已经示
出组件的单个实例来简化图,但可以存在图1中示出的任意组件的附加实例。例如,可以存
在图1中示出的任意组件的其他实例。也可以存在图1中未示出的组件。
图2是示出用于处理消息内容匹配器的过程的实施例的流程图。图2的过程可以在
图1的访问点102中实施。
在202处,接收内容匹配器。在一些实施例中,接收内容匹配器包括接收与该内容
匹配器相关联的一个或多个用户期望接收的消息的至少一部分内容的规范
(specification)。规范包括内容的规范(如果包括在正被分析的消息中的话),其允许内容
匹配器匹配该消息。在一些实施例中,内容匹配器指定字段和相关联的值。如果消息在其内
容中包括所指定的字段以及该消息的该字段中内容匹配器的相关联的值,则该内容匹配器
匹配该消息。内容匹配器可以以允许字段/关键字/标签/对象和相关联的值的规范的格式
来指定。例如,内容匹配器可以以以下格式中的一个或多个来指定:JavaScript对象标记
(即JSON)、可扩展标记语言(即XML)以及YAML。
JSON格式内容匹配器的示例示出如下。
如果包括在内容匹配器中的字段/值对中的每一个匹配包括在消息中的字段的相
应值,则以上命名为“匹配器”的内容匹配器匹配该消息。“匹配器”内容匹配器指定为了消
息匹配内容匹配器,该消息必须包括标识为“姓名”的字段,该字段包括相关联的值
“steve”;以及标识为“年龄”的另一字段,该另一字段包括相关联的数值21。在一些实施例
中,针对内容匹配器字段/值对的值所指定的数据类型必须匹配消息的匹配内容的数据类
型,以便消息匹配内容匹配器。在一些实施例中,内容匹配器的字段/值对包括用于单个字
段的多个值,并且为了消息匹配内容匹配器,该消息必须包括在该消息的匹配字段中的多
个值。在一些实施例中,内容匹配器中指定的字段/值对的相关联的值是布尔值。例如,在内
容匹配器的字段/值对中的布尔值指定为真的情况下,如果消息的字段/值对包括具有任意
值的内容匹配器字段/值对的字段,则内容匹配器的字段/值对匹配消息的字段/值对,并且
在内容匹配器的字段/值对中的布尔值指定为假的情况下,如果消息不包括内容匹配器字
段/值对的字段,则内容匹配器的字段/值对匹配消息。
内容匹配器的所有字段/值对必须匹配消息的至少一部分内容,以便内容匹配器
匹配该消息。例如,以上的“匹配器”内容消息匹配以下消息“消息1”但不匹配消息“消息2”,
因为“消息2”不包括具有值21的“年龄”字段。
在一些实施例中,有兴趣接收匹配所接收的内容匹配器的消息的(多个)订阅者的
一个或多个标识符与所接收的内容匹配器一起被接收。在一些实施例中,有兴趣接收匹配
所接收的内容匹配器的消息的订阅者的标识符是内容匹配器的发送者。所接收的内容匹配
器可以是所接收的多个内容匹配器的其中之一。
在204处,针对所接收的内容匹配器,生成字段列表。在一些实施例中,生成字段列
表包括确定并且提取在所接收的内容匹配器中指定的字段标识符。该列表中的字段可以以
可确定的顺序布置。例如,字段以与字段的字母顺序(例如,字母顺序或反向字母顺序)相关
联的顺序来布置。例如,对于以上示例“匹配器”内容匹配器,生成[“年龄”、“姓名”]的字段
列表。在一些实施例中,确定所生成的列表跨先前接收/处理/注册的内容匹配器是否是唯
一的。两个内容匹配器可以产生相同的生成的字段列表,因为每个内容匹配器指定相同字
段但指定字段的不同的相关联的值。确定列表是否唯一可以包括将字段列表与所存储的唯
一字段列表进行比较。如果字段列表是唯一的,则将该列表存储在唯一字段列表的数据存
储结构中。数据存储结构的示例包括列表、表格、哈希表格、数据库或者用于存储数据的任
何其他数据存储结构。如果字段列表不是唯一的,则列表不存储在唯一字段列表的数据存
储结构中。在一些实施例中,字段列表中的每个字段可以与该字段的相关联的值的数据类
型相关联。例如,数据类型可以是串、字符、整数、浮点数或者布尔值。在一些实施例中,在确
定消息是否匹配任何内容匹配器时使用所生成的字段列表。
在206处,所接收的内容匹配器被编译为编译格式。在一些实施例中,编译内容匹
配器包括将内容匹配器的内容重新排序并且格式化为标准化的单行格式(例如,单个串)。
在一些实施例中,编译内容匹配器包括(1)提取内容匹配器的内容(例如,提取开始和结束
括号之间的内容,而无需内容匹配器名称),(2)以确定的顺序(例如,以字母顺序的顺序)对
包括在所提取的内容中的字段/值对进行排序,(3)对每个字段/值对进行反向排序,使得其
变为值/字段对(例如,“年龄”:“21”变为“21”:“年龄”),以及(4)去除空白处并且对所得到
的内容进行重新格式化(例如,去除空白处并且以逗号而不是新的线分开每个值/字段对)。
例如,对于以上示例“匹配器”内容匹配器,所编译的内容匹配器是:“21”:“年龄”、“steve”:
“姓名”。在一些实施例中,通过对每个字段/值对进行反向排序以使得其变为值/字段对,在
存储所编译的内容匹配器时,哈希表格冲突被最小化。
在208处,所编译的内容匹配器被存储。所编译的内容匹配器存储在诸如列表、表
格、哈希表格、数据库或者用于存储数据的任何其他数据存储结构的数据存储结构中。存储
所编译的内容匹配器包括存储并且将所编译的内容匹配器注册为与有兴趣接收匹配该内
容匹配器的消息的(多个)订阅者的一个或多个标识符(例如,在202处连同所接收的内容匹
配器一起接收的(多个)订阅者标识符的列表)相关联。例如,所编译的内容匹配器被存储为
一个或多个相关联的订阅者标识符的相关联的值的密钥。在一些实施例中,在确定消息是
否匹配任何存储/注册的内容匹配器时,使用所存储/注册的编译的内容匹配器,并且如果
匹配被找到,则将消息提供给所匹配的内容匹配器的(多个)相关联的订阅者。
图3是示出用于处理消息以确定该消息是否匹配内容匹配器的过程的实施例的流
程图。图3的过程可以在图1的访问点102中实施。
在302处,接收消息。在一些实施例中,接收消息包括接收来自诸如图1的消息提供
者104的消息提供者的消息。所接收的消息可以经由消息流来接收。消息的示例包括新闻、
股票报价、用户消息以及任何其他内容实体。在一些实施例中,消息是多个所接收消息的其
中之一。消息可以是诸如JSON、XML、YAML的格式、或任何其他关键字/字段/标签组织格式。
在304处,对于每个可应用的字段列表,生成与可应用的字段列表中的每一个相对
应的编译的消息。在一些实施例中,字段列表包括在图2的204处生成的一个或多个字段列
表。例如,可应用字段列表的候选者是存储在图2的204处的唯一字段列表的数据存储结构
中的唯一字段列表。
在一些实施例中,生成编译的消息包括确定(多个)可应用的字段列表。在一些实
施例中,确定(多个)可应用的字段列表包括确定包括在所接收的消息中的字段。所确定的
字段可以以与(多个)字段列表相关联的排序相关联的顺序(例如字母顺序)进行排序。为了
确定(多个)可应用的字段列表,确定作为所接收的消息的字段的子集的唯一存储字段列表
的所有(多个)字段列表(例如,在图2的204处确定的)。例如,确定包括全部在所接收的消息
中指定的字段的(从内容匹配器编译的)唯一字段列表的所有(多个)字段列表。如果(多个)
可应用的字段列表为空,则过程结束并且确定消息不匹配任何内容匹配器并且该消息将不
递送至任何订阅者。
对于(多个)可应用的字段列表中的每个可应用的字段列表,所接收的消息被编译
为可应用的字段列表的格式。在一些实施例中,所编译的消息可与编译的内容匹配器比较
以确定所编译的消息是否匹配任何内容匹配器。
在一些实施例中,编译消息包括(1)提取与可应用的字段列表相对应的消息的内
容(例如,提取包括在匹配可应用的字段列表中的每个字段的消息中的字段/值对),(2)对
包括在所提取的内容中的字段/值对进行排序(例如,以字母顺序排序)(例如,如果消息中
的字段/值对以包括在可应用的字段列表中的字段的顺序来提取,则可以不执行排序),(3)
对每个字段/值对进行反向排序,以使得其变为值/字段对(例如,“年龄”:“21”变为“21”:
“年龄”),以及(4)去除空白处并且对所得到的内容进行重新格式化(例如,去除空白处并且
以逗号而不是新的线分开每个值/字段对)。
例如,两个内容匹配器已经被处理和注册。
对于内容匹配器“内容匹配器1”,所确定的字段列表是[“年龄”、“姓名”]并且对于
内容匹配器“内容匹配器2”,所确定的字段列表是[“年龄”、“电话”]。当以下消息被接收时,
确定用于“内容匹配器1”的字段列表可应用于该消息,因为该消息包括“年龄”字段以及“姓
名”字段二者,并且用于“内容匹配器2”的字段列表也可应用于该消息,因为该消息包括“姓
名”字段以及“电话”字段二者。
对于“内容匹配器1”字段列表[“年龄”、“姓名”],以上消息被编译为21:“年龄”、
“steve”:“姓名”,并且对于“内容匹配器2”字段列表[“姓名”、“电话”],以上消息被编译为
“steve”:“姓名”、“555-1212”:“电话”。
在306处,确定所接收的消息的所编译的消息的一个或多个中的每一个是否匹配
一个或多个注册的内容匹配器。在一些实施例中,注册的内容匹配器是使用图2的过程而接
收和处理的内容匹配器。在一些实施例中,确定所接收的消息的所编译的消息的一个或多
个中的每一个是否匹配一个或多个注册的内容匹配器包括确定所编译的消息的一个或多
个中的每一个是否与图2的208处存储在数据存储结构中的编译的内容匹配器相同。例如,
包含注册的内容匹配器的数据存储结构被搜索以确定每个编译的消息是否匹配数据存储
结构的任何条目。如果对于编译的消息找到匹配的编译的内容匹配器,编译的消息的原始
消息被发送至与匹配的编译的内容匹配器相关联的一个或多个消息订阅者(例如,包含注
册的内容匹配器的数据存储结构存储与每个编译的内容匹配器相关联的一个或多个消息
订阅者的列表)。
以下段落描述处理内容匹配器和要分发给如由内容匹配器标识的消息订阅者的
消息的联合示例。以下的第一内容匹配器被接收以进行处理和注册。
该内容匹配器“内容匹配器A”接收自消息订阅者“订阅者1”,该消息订阅者期望接
收匹配该内容匹配器的消息。该内容匹配器用于生成包含单个字段[“主题”]的唯一字段列
表(例如,在图2的204处生成的)并且编译为“运动”:“主题”(例如,在图2的206处编译的)。
以下的第二内容匹配器被接收以进行处理和注册。
该内容匹配器“内容匹配器B”接收自第二消息订阅者“订阅者2”,该第二消息订阅
者期望接收匹配该内容匹配器的消息。该内容匹配器用于生成包含字段[“子主题”、“主
题”]的唯一字段列表(例如,在图2的204处生成的)并且编译为“棒球”:“子主题”、“运动”:
“主题”(例如,在图2的206处编译的)。
以下的第三内容匹配器被接收以进行处理和注册。
该内容匹配器“内容匹配器C”接收自第三消息订阅者“订阅者3”,该第三消息订阅
者期望接收匹配该内容匹配器的消息。该内容匹配器用于生成包含单个字段[“主题”]的字
段列表(例如,在图2的204处生成的)。然而,因为该字段列表并不是唯一的(即,“内容匹配
器A”生成相同的字段列表),该字段列表未存储为唯一的。该内容匹配器编译为“八卦”:
“主题”(例如,在图2的206处编译的)。
此时,包含注册的编译的内容匹配器的数据存储结构(例如,图2的208处存储的数
据存储结构)将包含三个条目:
“八卦”:“主题”
订阅者3
7 -->
“棒球”:“子主题”、“运动”:“主题”
订阅者2
“运动”:“主题”
订阅者1
在当前示例中,以下消息被接收。
针对先前使用所注册的内容匹配器确定的每一个可应用的字段列表,编译所接收
的消息。对于字段列表[“主题”],所接收的消息被编译为“运动”:“主题”(例如,在图3的304
处编译的)。该编译的消息与注册的编译的内容匹配器进行比较(例如,图3的306处的比较)
并且确定该编译的消息匹配与订阅者1相关联的内容匹配器。将整个所接收的消息提供给
订阅者1。对于字段列表[“子主题”、“主题”],所接收的消息被编译为“棒球”:“子主题”、“运
动”:“主题”(例如,图3的304处编译的)。该编译的消息与注册的编译的内容匹配器进行比
较(例如,图3的306处的比较),并且确定该编译的消息不匹配任何编译的内容匹配器并且
没有其他订阅者被提供所接收的消息。
虽然已经出于清楚理解目的而以某种细节描述了前述实施例,但本发明不限于所
提供的细节。存在许多实施本发明的替代方式。所公开的实施例是说明性的而非限制性的。