一种支持SQL语法的消息系统的制作方法

文档序号:17080334发布日期:2019-03-09 00:11阅读:176来源:国知局
一种支持SQL语法的消息系统的制作方法

本发明涉及支持sql语法的消息系统(下文也称消息中间件)的客户端,和相对应的中间件配套技术,易参考数据处理整合领域,特别是涉及dql(数据查询语言)的相关配套技术。



背景技术:

消息中间件的作用是通过对消息的路由和派发,达到支持水平扩容和服务的解耦合的底层技术。基于消息中间件技术开发的客户端,时常需要考虑如何将重要消息缓存和消息的落地等一些列围绕消息的可靠性展开的问题,而这些往往使得服务构建冗繁,消息使用者需要订阅很多消息,并自己进行消息的过滤,再围绕需要落地的消息进行数据存储,消息订阅和发布往往是按照主题(也称为topic或者subject)来完成的。

在消息的过滤上,一个典型场景就是订阅的消息仅有部分是需要的,因为往往订阅者是没有直接和数据发布者的有提前约定的,比如数据源发布的数据是十月份的天气情况,并没有提供按日的接口,但是如果需要了解十月中某一天的天气数据,就需要订阅十月消息这个数据源,并且根据返回的数据结构解析后去除不需要的30天的数据。首先这样的操作比较复杂,其次对中间件的负载比较大,假如很多人订阅这一主题,那么将产生很多的重复的冗余的消息,这样对消息源和中间件产生了双重的压力。

基于sql的中间件的发明的目的之一就是为了解决这一问题,回到这个例子中,改进后的中间件的客户端可以使用sql进行以某一天为查询条件的精准查询,而这个查询不需要建立在消息发布源,只需要进行一些基础的配置,中间件本身会将筛选后的消息以需要订阅的主题发布,而查询在中间件内变成轻负担和快速高效的,使得中间件整体性能有了很大程度的提升。



技术实现要素:

为了解决现有中间件的这些问题,本发明给出一种更加简易和高效的基于中间件的支持sql(sql语法)的消息系统,在现有的具有中间节点和设施的中间件(现有流行中间件按照有无中间节点分为两类,有节点的例如:rabbitmq、rocketmq等,无节点的例如:zeromq等)基础上增加2个特性:

增加以可配置的基于内存的缓存备份模块作为中间件内部的一部分,这个缓存备份模块将所有配置过的主题之下的消息按照消息协议(例如json格式、protobuf格式等)解析后进行缓存,并能够支持消息落地和启动后的重新加载。

增加用于sql语法操作的特殊的内置主题消息,并确定消息的格式和协议,不同主题具有不同功能。例如设置一个名为“weather”的主题,这个主题的内容将会被应用到缓存备份模块向其他模块提供sql操作服务,该主题的消息本身是一条关于两个字段的内容,例如以json格式约定后定义的消息:

{“date”:“2018/03/14”,“content”:“rainy”}

当消息源发布这个主题的消息时,缓存备份模块就会订阅并将这个消息按照约定的消息格式进行解码,之后按照date和content进行键-值存储到关系型内存数据库中例如hazelcast(一款基于java的关系型内存数据库),当接入总线的各个客户端需要这个消息的时候,可以约定发送名为“query”的主题消息,缓存备份模块会事先订阅这个主题的消息,这个消息是从客户端发出的,内容为一句sql语句的消息,例如:

select*fromweatherwheredate=“2018/03/14”

当存储备份模块接收到这样一条语句时,就会触发sql解析将weather和筛选条件解析出来,并调用hazelcast的查询语句将结果查询出来,也就是之前发布的符合条件的天气信息,再将结果以约定好的例如“resp_weather”主题发布,客户端进行了向存储备份模块的查询后会自动订阅这个主题,将消息内容当作返回值处理,这样就完成了基于sql的消息系统的基本消息交互。

经过以上两部,中间件就具有了通过sql进行消息过滤的功能,需要被大量订阅的消息的主题可以配置在配置文件里,缓存备份模块去订阅,大量的订阅者直接查询所需要的主题,由于查询是基于内存数据库的,所以是很快速高效的同时可以添加对各个键的自定义筛选,这样不仅减轻了总线和真实发布源的压力还增加了动态筛选的功能,同时由于内置的缓存备份模块本身也是消息中间件的一个客户端,具有水平扩容的特性,方便分片(订阅不同的主题)和备份冗余(订阅相同的主题)来应对大数据和降低延时的场景。

附图说明

图1:总线缓存和sql语句流向流程图。

具体实施方式

结合图1,详细说明本发明的一个具体实施例,但不对本发明的权利要求作任何限定。

图1中不同数据源的提供查询服务的数据都通过配置譬如yaml(一种配置文件格式)配置主题项,之后消息源1和消息源2的消息只要是满足配置的主题的消息都会被完整记录到存储备份中,并将消息以键值的结构存储在内存数据库中(也就是key-value的形式)。

将客户端所需要产生的诸如查询增删等操作的sql语句的载体消息的主题提前约定,并告知存储备份去订阅,消息从消息源a、b出来,被直接订阅并存储到缓存备份模块中,这个模块是基于高速存储的,也会异步地把消息落地到二级存储中,存储备份模块同时订阅客户端a和b将会发送的增删改的主题,当收到消息可以验证消息来源是否有权限修改数据,并解析sql之后把结果集通过一个带有事先约定前缀或者固定的主题发布,这样需要接收结果集的客户端可以订阅这个主题,就收到了处理过的消息,这样就提供了基于sql的消息流处理中间件,大大增强了现有中间件的扩展性,并降低了内部的消息负荷。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。



技术特征:

技术总结
本发明公开了一种支持SQL语法的消息系统。所谓消息系统就是消息中间件,消息中间件作为中间件的一种,具有屏蔽底层服务差异化的特点,对外部使用者提供了统一的易用的接口来实现收发消息从而屏蔽了底层细节。通常来说消息的消费者和消息发送者具备处理消息的能力,而支持SQL语法的消息中间件,则将额外具备中间件层的对消息本身的处理能力,结合中间件层高性能和强大的解耦特性,基于SQL语法的消息系统将会具备对消息的即时过滤和可针对配置消息的增删改查,可以用作冗余备份保证数据完整性也可以支定制更强更强大的api以支撑消息中间件的高可用扩展。

技术研发人员:曾博远;罗文辉;陶瑞甫;胡冠睿;景富香;王轮樟;齐秋灝;郭智;梁宏韬
受保护的技术使用者:珠海凡泰极客科技有限责任公司
技术研发日:2018.09.12
技术公布日:2019.03.08
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1