一种基于Redis管道通信的消息传递方法及系统的制作方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种基于Redis管道通信的消息传递方法及系统。
【背景技术】
[0002]Redis是一个开源、支持网络、基于内存的键值对存储数据库,支持多种数据类型和多种操作,具有强大的管理数据的功能。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Ob ject_C、Python、Ruby、Er Iang 等客户端,使用很方便。Redis由于它的高性能和简单的操作命令,完全可以作为软件和传统数据库之间的缓冲作用,在保证了数据有效性的情况下,同时也保证了高性能。
[0003]Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
[0004]目前一般平台的消息传递主要通过将数据存入关系型数据库,然后由业务处理平台从数据库中读取数据、缓存、过滤、解析再传输到用户软件上显示。存在的问题在于:
[0005]1、数据库的读写不分离,互斥锁会导致读写效率低下,业务处理平台负载均衡的服务器数目越多,数据访问越频繁,读取越慢;
[0006]2、业务数据整存整取,业务处理平台会取到较多的冗余数据,增加了业务处理平台的数据处理压力。
【发明内容】
[0007]本发明要解决的技术问题之一,在于提供一种基于Redis管道通信的消息传递方法,使得消息能快速有效的传输;本方法支持自动故障转移功能;可读写分离,支持负载均衡,可无限扩容。
[0008]本发明的问题之一,是这样实现的:
[0009]一种基于Redis管道通信的消息传递方法,包括如下步骤:
[0010]步骤1、启动接收服务器,接收数据消息并读取基础数据,将该数据消息、其接口及该基础数据进行封装,并将封装后的数据消息进行分类,调用发布指令,并根据该数据消息的类型将该数据消息发布到Redis服务器的不同通道中;同时,将封装后的基础数据存储至Redis服务器内;
[0011]步骤2、业务处理平台发送订阅指令给Redis服务器,Redis服务器接收该订阅指令后,将相应通道中的数据消息传输给业务处理平台;同时,业务处理平台从Redis服务器获取基本数据;
[0012]步骤3、业务处理平台将订阅后的数据消息进行过滤;
[0013]步骤4、业务处理平台使用封装好的接口将过滤后的数据消息的格式直接转换为用业务处理平台来解读的对象格式后,根据基础数据将过滤后的数据消息进行解析;
[0014]步骤5、业务处理平台获取解析后的数据消息,并将该数据消息传输到用户软件进行显示。
[0015]进一步地,所述接收服务器及业务处理平台与Redis服务器的连接方式具体为:
[0016]接收服务器与业务处理平台均使用Redis连接池与Redis服务器进行Redis连接,如果Redis Sentinel集群监控到Redis服务器发生故障,说明Redis连接中断,贝IjRedis连接池将等待Redis Sentinel集群进行自动的故障转移切换,若切换成功,则重新创建Redis连接进行数据消息的传输,若切换不成功,则结束流程;如果Redis服务器不发生故障,则说明Redis连接不中断,则Redis Sentinel集群不进行故障转移切换。
[0017]进一步地,所述步骤I中将该数据消息及其接口进行封装具体为:
[0018]将数据消息封装为json格式字符串,并将其接口封装为json序列化接口。
[0019]进一步地,所述步骤I中所述数据消息的类型包括最新位置信息类型、报警信息类型、图片信息类型、外设信息类型和应答信息及其他业务数据类型。
[0020]本发明要解决的技术问题之二,在于提供一种基于Redis管道通信的消息传递系统,使得消息能快速有效的传输;本方法支持自动故障转移功能;可读写分离,支持负载均衡,可无限扩容。
[0021 ]本发明的问题之二,是这样实现的:
[0022]一种基于Redis管道通信的消息传递系统,包括:
[0023]数据消息接收模块,用于启动接收服务器,接收数据消息并读取基础数据,将该数据消息、其接口及该基础数据进行封装,并将封装后的数据消息进行分类,调用发布指令,并根据该数据消息的类型将该数据消息发布到Redis服务器的不同通道中;同时,将封装后的基础数据存储至Redis服务器内;
[0024]数据消息传输模块,用于业务处理平台发送订阅指令给Redis服务器,Redis服务器接收该订阅指令后,将相应通道中的数据消息传输给业务处理平台;同时,业务处理平台从Redis服务器获取基本数据;
[0025]数据消息过滤模块,用于业务处理平台将订阅后的数据消息进行过滤;
[0026]数据消息解析模块,用于业务处理平台使用封装好的接口将过滤后的数据消息的格式直接转换为用业务处理平台来解读的对象格式后,根据基础数据将过滤后的数据消息进行解析;
[0027]数据消息显示模块,用于业务处理平台获取解析后的数据消息,并将该数据消息传输到用户软件进行显示。
[0028]进一步地,所述接收服务器及业务处理平台与Redis服务器的连接方式具体为:
[0029]接收服务器与业务处理平台均使用Redis连接池与Redis服务器进行Redis连接,如果Redis Sentinel集群监控到Redis服务器发生故障,说明Redis连接中断,贝IjRedis连接池将等待Redis Sentinel集群进行自动的故障转移切换,若切换成功,则重新创建Redis连接进行数据消息的传输,若切换不成功,则结束切换;如果Redis服务器不发生故障,则说明Redis连接不中断,则Redis Sentinel集群不进行故障转移切换。
[0030]进一步地,所述数据消息接收模块中将该数据消息及其接口进行封装具体为:
[0031 ]将数据消息封装为json格式字符串,并将其接口封装为json序列化接口。
[0032]进一步地,所述数据消息接收模块中所述数据消息的类型包括最新位置信息类型、报警信息类型、图片信息类型、外设信息类型和应答信息及其他业务数据类型。
[0033]本发明具有如下优点:
[0034]本发明的一种基于Redis管道通信的消息传递方法是一种平台间大规模数据消息稳定有效的传输的方法,通过Redis管道通信将数据按照类型发布到不同的管道,业务处理平台只需要根据配置侦听对应类型的管道,收取需要的数据,减少了数据的冗余;在本方法中,业务处理服务和接收服务所使用的Redis连接池可以支持Redis主从集群,保证了数据读写分离,实现了数据的高效传输;还提供了利用Redis Sentinel故障监控集群搭建的Redis集群故障自动迀移系统,根据Redis Sentinel上报的当前主服务器master所使用的ip、端口创建Redis Client可读写连接发布数据消息,根据Redis Sentinel上报