基于数据库的分布式消息中间件系统及其运行方法技术方案

技术编号:10120393 阅读:185 留言:0更新日期:2014-06-12 08:47
本发明专利技术公开了一种基于数据库的分布式消息中间件系统及其运行方法。该分布式消息中间件系统包括消息采集组件、数据库、消息分发组件和消息交换组件,数据库中包括消息容器;消息采集组件用于接收来自消息生产者的消息并交给消息交换组件;消息分发组件用于接收来自消息消费者的消费请求并交给消息交换组件;消息交换组件用于将来自消息采集组件的消息存入消息容器,还用于根据消费请求从消息容器中读出消息并交给消息分发组件以供给消息消费者进行消费。本发明专利技术结合了数据库的可靠性、高可用性、事务性和易于运维以及消息队列服务的异步性和应用解耦性等优点,并且显著地提高了在面对高并发的业务场景时的运行性能。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种。该分布式消息中间件系统包括消息采集组件、数据库、消息分发组件和消息交换组件,数据库中包括消息容器;消息采集组件用于接收来自消息生产者的消息并交给消息交换组件;消息分发组件用于接收来自消息消费者的消费请求并交给消息交换组件;消息交换组件用于将来自消息采集组件的消息存入消息容器,还用于根据消费请求从消息容器中读出消息并交给消息分发组件以供给消息消费者进行消费。本专利技术结合了数据库的可靠性、高可用性、事务性和易于运维以及消息队列服务的异步性和应用解耦性等优点,并且显著地提高了在面对高并发的业务场景时的运行性能。【专利说明】
本专利技术涉及一种分布式消息队列服务,尤其是涉及一种基于数据库的分布式消息中间件系统以及该分布式消息中间件系统的运行方法。
技术介绍
关系型数据库是企业应用系统常用的数据存储方案,具有可靠性、可用性、事务、优化的资源竞争等特性,同时由于获得大量使用的缘故,企业通常都具有丰富的数据库运维经验,因而也易于运维和管理。但是关系型数据库在面对高并发、高吞吐量的业务时性能表现不佳。消息队列服务是企业应用之间实现异步通信的常见方案,通常具有异步、高吞吐量、应用解耦等优点。为了支持消息的可靠递交,消息队列服务需要将消息进行持久化,但是由于关系型数据库的先天缺陷,在常用的消息队列服务系统中持久化方案一般都是自行开发的,很少利用现有的关系数据库,这大大提高了编程的复杂性,对消息系统的运维和监控也很不方便。而少量使用关系数据库实现持久化的方案,虽然在编程复杂度和后期运维上有便利性,但是在面对高并发的业务场景时会发生严重的性能问题。
技术实现思路
本专利技术要解决的技术问题是为了克服现有技术中在利用数据库实现消息的持久化时,在面对高并发的业务场景时会发生严重的性能问题的缺陷,提供一种基于数据库的分布式消息中间件系统以及该分布式消息中间件系统的运行方法,其结合了数据库的可靠性、高可用性、事务性和易于运维以及消息队列服务的异步性和应用解耦性等优点,并且显著地提高了在面对高并发的业务场景时的运行性能。本专利技术是通过下述技术方案来解决上述技术问题:一种基于数据库的分布式消息中间件系统,其特点在于,该分布式消息中间件系统包括消息采集组件、数据库、消息分发组件和消息交换组件,数据库中包括消息容器,消息容器通过与数据库中存有消息的消息表对应而存储消息;消息采集组件用于接收来自消息生产者的消息并交给消息交换组件;消息分发组件用于接收来自消息消费者的消费请求并交给消息交换组件;消息交换组件用于将来自消息采集组件的消息存入消息容器,还用于根据消费请求从消息容器中读出消息并交给消息分发组件以供给消息消费者进行消费。在本专利技术中,消息交换组件与消息容器之间是相互绑定的,消息交换组件仅向绑定的消息容器中存入消息以及仅从绑定的消息容器中读出消息。在消息采集过程中:消息生产者向消息采集组件发送消息,消息中包括有消息交换地址、消息主题以及消息内容等消息数据;消息采集组件根据接收到的消息交换地址选择消息交换组件,并将消息交给选定的消息交换组件进行处理;被选定的消息交换组件将消息存入消息容器,从而完成采集。在消息分发过程中:消息消费者向消息分发组件发起消息消费请求,消费请求中包括有消费者标识、消息交换地址、消费的消息主题等信息;消息分发组件根据消息交换地址选择消息交换组件,并将消费请求交由选定的消息交换组件进行处理;被选定的消息交换组件从绑定的消息容器中取出符合条件的消息,并返回给消息消费者。消息容器是对数据库的逻辑划分,其负责将消息数据持久化保存,以保证消息的可靠性。每个消息容器都与数据库中的一张存储有消息的物理数据表(即消息表)对应,因此也可以说,每个消息容器中均存储有其对应的那一张物理数据表中的所有消息。本专利技术中的消息交换组件支持点对点(Queue)消息交换语义和发布/订阅(pub/sub )消息交换语义,此处与传统的消息组件内涵相同,故不做赘述。较佳地,该分布式消息中间件系统还包括生产端消息代理和消费端消息代理,消息生产者通过生产端消息代理与消息采集组件通信,消息消费者通过消费端消息代理与消息分发组件通信。消息代理主要提供应用集成所必须的数据的递送、收集、翻译、过滤、映射和路由等功能,其能够屏蔽不同的硬件平台、数据库、消息格式、通信协议之间的鸿沟与差异,提供应用到应用之间的高效、便捷的通信能力。较佳地,消息交换组件的数量为一个或多个,每个消息交换组件与一个或多个数据库中的消息容器绑定,每个数据库中的消息容器的数量为一个或多个,消息采集组件和/或消息分发组件的数量为一个或多个。同一个数据库中多个消息容器的分布能够分担不同消息交换地址上的压力,保证系统平稳运行;当数据库成为访问瓶颈时,多个数据库的分布能够分担系统压力,保证系统平稳运行。而每个消息交换组件则既可以与一个数据库中的一个或多个消息容器绑定,也可以与多个数据库中的消息容器(每个数据库中同样可以有一个或多个消息容器)绑定。多个消息采集组件则实现了消息采集服务的水平扩展,在来自消息生产者的压力大时,便可以通过增加消息采集组件的数量来扩展消息采集的处理能力。类似地,多个消息分发组件则实现了消息分发服务的水平扩展,在消费请求量大时,便可以通过增加消息分发组件的数量来实现消息分发服务的负载均衡,从而提高系统的可用性。较佳地,消息容器的数量为多个,每个消息容器均具有用于表征该消息容器中的消息的命中率的权重,消息交换组件用于根据权重选择存入消息的消息容器及读出消息的消息容器,以加快数据库处理速度以及平衡各个数据库之间的负载比率。如果消息交换组件上交换的消息数量太多,为了提高消息吞吐率,同时也为了不给数据库带来太大压力,每个消息交换组件可以和多个消息容器绑定,并将该多个消息容器分布到多个数据库中,当需要存入消息时,消息交换组件会根据消息容器的权重选择一个消息容器并存入消息。较佳地,消息采集组件用于接收来自消息生产者的消息并放入本地缓存队列,仅在本地缓存队列已满或定时器到期时才将本地缓存队列中的消息交给消息交换组件。此处的定时器用于确定一定的时间间隔,本专利技术对该时间间隔的具体取值没有限制。在将消息存入消息容器时不是直接写入,而是采用上述异步方式实现,当定时器到期或者本地缓存队列已满时,才由专门的写入线程将消息存入消息容器,这样能够在保证消息吞吐率的同时,大大降低数据库的访问压力。较佳地,消息交换组件从消息容器中读出批量消息并缓存于消息分发组件中以供给消息消费者进行消费。较佳地,该分布式消息中间件系统还包括监控组件,监控组件用于:对每个消息容器中已交给消息分发组件的消息进行记录,在采用多个消息分发组件的情况下,这将能够防止同一消息被重复消费;和/或,对已交给消息分发组件的消息的存储位置以及所交至的消息分发组件进行记录,在采用多个消息分发组件的情况下,每个消息分发组件都在自己的批量范围内进行消费,便可以解决多个消息分发组件同时消费消息的问题;和/或,对已交给消息分发组件的批量消息中已被消费的消息进行记录,这便实现了对批量消息中当前被消费的消息的位置的标记,当消费超时或是程序崩溃之后,都会从当前这个标记的位置处开始消费,并且这个标记还可以用于重发消息,由此便提高了系统本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201310287640.html" title="基于数据库的分布式消息中间件系统及其运行方法原文来自X技术">基于数据库的分布式消息中间件系统及其运行方法</a>

【技术保护点】
一种基于数据库的分布式消息中间件系统,其特征在于,该分布式消息中间件系统包括消息采集组件、数据库、消息分发组件和消息交换组件;数据库中包括消息容器,消息容器通过与数据库中存有消息的消息表对应而存储消息;消息采集组件用于接收来自消息生产者的消息并交给消息交换组件;消息分发组件用于接收来自消息消费者的消费请求并交给消息交换组件;消息交换组件用于将来自消息采集组件的消息存入消息容器,还用于根据消费请求从消息容器中读出消息并交给消息分发组件以供给消息消费者进行消费。

【技术特征摘要】

【专利技术属性】
技术研发人员:梁晓靖
申请(专利权)人:携程计算机技术上海有限公司
类型:发明
国别省市:上海;31

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

1