一种基于Kafka消息中间件的双向通信系统及方法技术方案

技术编号:14337520 阅读:103 留言:0更新日期:2017-01-04 10:42
本发明专利技术公开了一种基于Kafka消息中间件的双向通信系统及方法,其系统包括发布者、订阅者、Kafka集群以及数据库;发布者和订阅者都包含Kafka生产者和Kafka消费者,且都具有向Kafka集群发布和从Kafka集群接收消息的能力;其方法基于该系统,包括发布者处理过程和订阅者处理过程,其中发布者处理过程包括发布者初始化、发布者的消息上传以及发布者的消息下发的步骤;订阅者处理过程包括订阅者的初始化、订阅者的消息上传以及订阅者的消息下发的步骤;本发明专利技术提供的这种系统及方法实现了基于Kafka消息中间件的双向通信;可应用于需要反方向通信的环境进行双向的数据采集与控制。

【技术实现步骤摘要】

本专利技术属于分布式系统节点间通信
,更具体地,涉及一种基于Kafka消息中间件的双向通信系统及方法
技术介绍
消息中间件是一种广泛运用在分布式系统中的用于节点间通信的软件。Kafka是由LinkedIn公司开发并开源的消息中间件。Kafka消息中间件主要由生产者、代理者和消费者组成,生产者发布消息,代理者将消息从生产者转发到消费者,消费者接收并处理消息。在实际运用中,一般会将多个Kafka代理者以集群的方式运行形成Kafka集群。Kafka提供一种特殊的发布/订阅模式。在传统的发布/订阅模式中,生产者向某个消息主题发布消息,订阅者则向代理者订阅并获取某个主题下的消息。在Kafka消息中间件技术中,主题是指Kafka集群维护的按照不同分类进行区分的消息流。Kafka对主题进行了分区,Kafka消息是具有键和值的消息,具有相同的键的消息会进入到同一个分区,同一个分区的消息会发送到相同的消费者。这样具有相同键的消息、主题分区和消费者会有一定的映射关系。在这种消息转发模式下,Kafka只支持单向的消息转发,不能直接支持反方向的消息转发,因此在某些需要反方向通信的环境中,如工业现场监控、智能家居等应用场景,Kafka则不能完全满足数据采集与控制的需求。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种基于Kafka消息中间件的双向通信系统及方法,其目的在于解决现有Kafka不能支持反方向消息转发的问题。为实现上述目的,按照本专利技术的一个方面,提供了一种基于Kafka消息中间件的双向通信系统,该系统包括发布者、订阅者、Kafka集群以及数据库;其中,发布者和订阅者均包含Kafka生产者和Kafka消费者,且均具有向Kafka集群发布和从Kafka集群接收消息的能力;其中,发布者用于与消息流进行通信、向Kafka集群发布上传消息、从Kafka集群接收下发消息;订阅者用于与其他应用程序通信,获取或者生成下发消息、向Kafka集群发布下发消息、从Kafka集群接收上传消息;数据库用于存储消息流标识与发布者标识之间的映射关系。优选的,上述的双向通信系统,采用Redis分布式内存数据库存储上述映射关系,以提高短时大量查询的访问效率。优选的,上述的双向通信系统,订阅者中具有一张维护消息流标识与发布者标识之间映射关系的消息流发布者Hash表、一张发布者标识与发布者主题之间映射关系的发布者主题Hash表;其中,发布者、发布者标识和发布者主题具有一一对应的关系且全局唯一;发布者中具有一张维护消息流标识与外部消息流映射关系的消息流标识Hash表;上传消息是指从发布者发送到订阅者的消息;下发消息是指从订阅者发送到发布者的消息;发布者主题是指发布者需要订阅的主题并从该主题下接受下发消息;订阅者主题是指订阅者需要订阅的主题并从该主题下接受上传消息;外部消息流是指外部数据源按照任意网络通信方式提供的包含任意格式和类型数据的消息序列。为实现本专利技术目的,按照本专利技术的另一个方面,基于上述的双向通信系统,提供了一种基于Kafka消息中间件的双向通信方法,包括发布者处理过程和订阅者处理过程;其中,发布者处理过程包括以下步骤:(a1)发布者从配置文件中获取相关配置,包括发布者主题、用于上传消息的订阅者主题、发布者标识;对消息流标识Hash表进行初始化处理,从Kafka集群订阅发布者主题;(a2)当外部消息流中有消息需要上传时,发布者从外部消息流中获取上传信息;以该上传消息为基础构建Kafka消息,并将此Kafka消息发布到Kafka集群中当前发布者上传消息的订阅者主题下;(a3)当发布者从Kafka集群接收到需要下发的Kafka消息,解析Kafka消息取出拟下发的消息,将拟下发的消息发送到指定的外部消息流;其中,订阅者处理过程包括以下步骤:(b1)订阅者从配置文件中读取相关配置,包括订阅者主题、发布者标识与发布者主题的映射关系;消息流发布者Hash表和消息流主题Hash表进行初始化处理,并从Kafka集群订阅订阅者主题;(b2)当订阅者从Kafka集群接收到拟上传的Kafka消息,根据Kafka消息更新消息流标识与发布者标识之间的映射关系,从Kafka消息中将抽取应用层消息,并发送到第三方应用程序;(b3)当订阅者自身产生拟下发消息或者收到第三方应用程序的拟下发信息时,订阅者以所述拟下发消息为基础构建Kafka消息,并将Kafka消息发布到Kafka集群的主题下。优选地,上述的双向通信方法,其步骤(a2)包括以下子步骤:(a2.1)从外部消息流获取需要上传的消息;(a2.2)在发布者标识与消息流标识之间添加分隔符,并按字符串相连接的方式组合构成Kafka消息的键,以从外部消息流获取的上传消息的内容构成Kafka消息的值,并发布到用于上传消息的订阅者主题;(a2.3)判断是否有新的外部消息流加入到发布者,若是,则进入步骤(a2.4);若否,则进入步骤(a2.1);(a2.4)生成一个随机数作为新的外部消息流的消息流标识;(a2.5)判断步骤(a2.4)中生成的新的消息流标识是否已经存在于消息流标识Hash表中,若是,则进入步骤(a2.4);若否,则进入步骤(a2.6);(a2.6)将新的消息流标识与外部消息流的映射关系插入到消息流标识Hash表中,进入步骤(a2.1)。优选地,上述的双向通信方法,其步骤(a3)包括以下子步骤:(a3.1)从Kafka集群获取Kafka消息;(a3.2)获取所述Kafka消息的消息流标识,并以所述消息流标识为键在消息流标识Hash表中查找外部消息流映射值;(a3.3)获取Kafka消息的值;并根据上述外部消息流映射值确定外部消息流,将Kafka消息的值发送给上述外部消息流,并进入步骤(a3.1)。优选地,上述的双向通信方法,其步骤(b2)包括以下子步骤:(b2.1)从Kafka集群获取需要上传的Kafka消息;(b2.2)以分隔符为分割标志、以字符串拆分的方式分割Kafka消息的键,以获得消息流标识和发布者标识;(b2.3)以消息流标识为键在消息流发布者Hash表中查找发布者标识,若没有查找到发布者标识映射值,则进入步骤(b2.4),否则进入步骤(b2.5);(b2.4)将消息流标识与发布者标识的映射关系插入到消息流发布者Hash表中,并进入步骤(b2.8);(b2.5)将步骤(b2.2)中获得的发布者标识和步骤(b2.3)中查找到的发布者标识进行比较;若两者的值不同,则进入步骤(b2.6),否则进入步骤(b2.7);(b2.6)根据步骤(b2.2)中获得的消息流标识和发布者标识的映射关系,更新消息流发布者Hash表,并进入到步骤(b2.8);(b2.7)将步骤(b2.1)中获取的Kafka消息的值,即需要上传的消息,和步骤(b2.2)中获得的消息流标识发送给消息处理程序,并进入步骤(b2.1);(b2.8)在数据库中更新消息流标识与发布者标识之间的映射关系,并进入步骤(b2.7)。优选地,上述的双向通信方法,其步骤(b3)包括以下子步骤:(b3.1)接收消息处理应用层下发的消息和消息流标识;(b3.2)以消息流标识为键,在消息流发布者Hash表中查找发布者标识映射值;若查找到,进入步骤本文档来自技高网...
一种基于Kafka消息中间件的双向通信系统及方法

【技术保护点】
一种基于Kafka消息中间件的双向通信系统,其特征在于,包括发布者、订阅者、Kafka集群以及数据库;所述发布者和订阅者均包含Kafka生产者和Kafka消费者,且均具有向Kafka集群发布和从Kafka集群接收消息的能力;所述发布者用于与消息流进行通信、向Kafka集群发布上传消息、从Kafka集群接收下发消息;所述订阅者用于与其他应用程序通信,获取或者生成下发消息、向Kafka集群发布下发消息、从Kafka集群接收上传消息;所述数据库用于存储消息流标识与发布者标识之间的映射关系。

【技术特征摘要】
1.一种基于Kafka消息中间件的双向通信系统,其特征在于,包括发布者、订阅者、Kafka集群以及数据库;所述发布者和订阅者均包含Kafka生产者和Kafka消费者,且均具有向Kafka集群发布和从Kafka集群接收消息的能力;所述发布者用于与消息流进行通信、向Kafka集群发布上传消息、从Kafka集群接收下发消息;所述订阅者用于与其他应用程序通信,获取或者生成下发消息、向Kafka集群发布下发消息、从Kafka集群接收上传消息;所述数据库用于存储消息流标识与发布者标识之间的映射关系。2.如权利要求1所述的双向通信系统,其特征在于,采用分布式内存数据库存储所述映射关系,以提高短时大量查询的访问效率。3.如权利要求1或2所述的双向通信系统,其特征在于,所述订阅者中具有一张维护消息流标识与发布者标识之间映射关系的消息流发布者Hash表、一张发布者标识与发布者主题之间映射关系的发布者主题Hash表;所述发布者、发布者标识与发布者主题具有一一对应的关系且全局唯一;所述发布者中具有一张维护消息流标识与外部消息流映射关系的消息流标识Hash表。4.一种基于权利要求1~3任一项所述的双向通信系统的基于Kafka消息中间件的双向通信方法,包括发布者处理过程和订阅者处理过程;其特征在于,所述发布者处理过程包括以下步骤:(a1)发布者从配置文件中获取配置,并对消息流标识Hash表进行初始化处理,从Kafka集群订阅发布者主题;所述配置包括发布者主题、用于上传消息的订阅者主题,以及发布者标识;(a2)当外部消息流中有需要上传的消息时,发布者从外部消息流中获取上传信息;并以所述上传消息为基础构建Kafka消息,并将所述Kafka消息发布到Kafka集群中当前发布者上传消息的订阅者主题下;(a3)当发布者从Kafka集群接收到需要下发的Kafka消息,解析Kafka消息获取拟下发的消息,将拟下发的消息发送到指定的外部消息流;所述订阅者处理过程包括以下步骤:(b1)由订阅者从配置文件中读取配置,并对消息流发布者Hash表和消息流主题Hash表进行初始化处理,并从Kafka集群订阅订阅者主题;所述配置包括订阅者主题、发布者标识与发布者主题的映射关系;(b2)当订阅者从Kafka集群接收到拟上传的Kafka消息,根据Kafka消息更新消息流标识与发布者标识之间的映射关系,从Kafka消息中获取应用层消息并发送到第三方应用程序;(b3)当订阅者自身产生拟下发消息或者收到第三方应用程序的拟下发信息时,订阅者以所述拟下发消息为基础构建Kafka消息,并将Kafka消息发布到Kafka集群的主题下。5.如权利要求4所述的双向通信方法,其特征在于,所述步骤(a2)包括以下子步骤:(a2.1)从外部消息流获取拟上传的消息;(a2.2)在发布者标识与消息流标识之间添加分隔符,并按字符串相连接的方式组合构成Kafka消息的键,以从外部消息流获取的拟上传消息的内容构成Kafka消息的值,...

【专利技术属性】
技术研发人员:王非谢青松
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1