本发明专利技术公开了一种轻量级消息中间件的实现方法,能够用于软件系统中各个模块之间的消息交互通信,以实现松耦合系统架构的目的。本发明专利技术方法包括:消息发送端消息的生产和发送;消息服务器对消息的接收以及持久化过程;消息服务器根据特定的负载均衡方案来选择消息接收端集群中的一台机器来完成该消息的消费,并通过特定框架来实现消息向该台机器的定向发送过程;消息接收端对消息的接收和处理过程。
【技术实现步骤摘要】
本专利技术属于通信
,尤其设及一种轻量级消息中间件的实现方法与系统。
技术介绍
近些年来,移动互联网正经历着爆炸式的发展,为了适应运种飞速的发展,各种移 动互联网软件也在不停的进行着版本的更迭和业务的扩展,所W如今移动互联网软件的设 计必须考虑到各个系统模块之间的松禪合性。中间件技术能很好的实现系统模块间松禪合 性的需求,其中使用较多的是消息中间件(Message化ientedMiddleware,MOM)技术。[000引 目前已提出多种消息中间件技术,比如基于java消息服务(JavaMessage Service,JM巧的ActiveMQ消息中间件框架、基于超文本传输协议(HyperTextTransfer Protocol,HIT巧协议级的轻量级消息队列服务组件UCMQ(-种轻量的HTTP协议级消息队 列服务组件)等,运些方法都在一定程度上解决了系统模块间松禪合性的需求。 但是现有的运些消息中间件架构在消息处理速度、系统硬件利用率(处理器、内 存、磁盘等)和负载均衡方面都存在或多或少的不足。在当今移动互联网大数据量的压力 下,消息中间件系统的消息处理速度、硬件利用率和负载均衡策略显得尤为关键。
技术实现思路
为了解决上述技术问题,本专利技术提供了一种轻量级消息中间件的实现方法,首先 能够满足系统模块间很好的松禪合性,其次能在消息处理速度、系统硬件利用方面和负载 均衡方面有着良好的表现。 为了实现上述目的,本专利技术提供了一种轻量级消息中间件的实现方法,包括: (1)消息发送端生产消息,并将消息传递到消息服务器中; (2)消息服务器在收到消息后,先将消息持久化到数据库中;然后根据特定负载 均衡策略从消息接收端集群中选出接收此消息的目的消息接收端,并将消息定向发送到目 的消息接收端; (3)消息接收端接收到消息后,根据消息的内容进行相应的处理。 在本专利技术的一个实施例中,所述步骤(1)消息发送端生产消息,并将消息传递到 消息服务器具体包括: 在消息发送前,首先要通过运行在单例模式下的生产者实例中的方法创建消息生 产者实例; 在创建消息生产者实例的时候,还需要声明对于该消息生产者实例的一些基本配 置,具体包括: 消息发送端发送消息的虚拟目的地址,即消息的主题,消息发送端和消息接收端 是通过绑定在同一个消息主题上而配对的; 此外,基本配置还包括消息发送端的失败重试次数、是否对消息内容进行压缩和 发送消息的并行线程池数目。 在本专利技术的一个实施例中,所述步骤(2)消息服务器将消息持久化到数据库的过 程,具体包括: 持久化的数据库选择了大数据量下插入和读取性能都非常比较优秀的非关系型 数据库MongoDB; 消息的存储采用的是MongoDB的Ca卵edCollection结构。 在本专利技术的一个实施例中,所述步骤(2)消息服务器根据特定负载均衡策略从消 息接收端集群中选出接收此消息的目的消息接收端,具体包括: 负载均衡策略是通过对各个消息接收端的实时信息来进行综合的比较分析和筛 选的,所述实时信息包括CPU、内存、吞吐速率、网络速率、磁盘大小和对同主题消息的历史 处理速率等;具体为: 在节点服务器i加入集群后,定期将自己的性能信息通过公式(1)进行计算,然后 发送给监控服务器存储下来, C(Al) =kl*C(P) +k2*C(M) +k3*C(V) +K4*C(脚 +k5*C值)+k6*C灯)(I) 阳02引式(1)中C(巧代表节点服务器i的CPU频率,C(M)则代表节点服务器i的内存大 小,C(V)代表节点服务器i的吞吐速率,C(脚代表节点服务器i的网络速率,CO)代表节 点服务器i的磁盘大小,C(T)代表节点服务器i对主题为A的消息的历史平均处理速率; 节点服务器还要定期的将自己的系统负载通过公式(2)计算然后发送给监控服 务器, L(Ai) =kl礼ip+k2 礼im+k3 礼iv+k4 礼m+k5 礼id+k6 礼It似式中,Lip代表节点服务器i当前的CPU占用率,Lim代表节点服务器i当前的内存 占用率,Lu代表节点服务器i的IO使用率,L1。代表节点服务器i的带宽使用率,LId代表 节点服务器i的磁盘使用率,Lit代表节点服务器i对消息主题A近期设定时间段内处理速 率与历史平均处理速率的比值; 监控服务器也会定期的通过公式(3)计算每个节点服务器的负载容余,并将计算 的值、节点性能C、节点实时负载L实时的更新到消费者状态日志中, Mi=MTi+kl*At*C/L-k2*Rn/C(3) 式中Mti表示上次时间片到达时,由服务器传入的负载容余,kl*A巧C/L表示在 At时间内完成的负载,k2*RyC表示At时间内为服务器节点添加请求而增加的负载; 当在某个T间隔内,有消息发送请求到达时,消息服务器会根据消息发送的量来 设定一个负载容余的区间[Mmm,MmJ; 消息服务器然后根据运个区间,查找消费者状态日志,选取在运个区间内的节点 服务器组成集合S,然后对S中的各个节点计算权值Wi=Ci/Li,选取权值最大的节点服务 器进行消息的发送。 上述的各个消息接收端服务器的实时信息是维护在一个消息接收端集群状态日 志中的; 消息接收端集群状态日志是由一个对消息接收端服务器集群进行监控的服务器 定期更新的。 在本专利技术的一个实施例中,所述步骤似消息服务器将消息定向的发送到目的消 息接收端,具体包括: 消息服务器将消息定向发送到指定的消息接收端是通过socket实现的。 在本专利技术的一个实施例中,所述步骤(3)消息接收端对消息的接收,其特征在于, 所述方法还包括:在消息接收端接收消息之前,要先获取消息接收端对象实例,具体包括: 在消息接收前,首先要通过运行在单例模式下的消费者实例中的方法创建消息接 收端实例。 在创建消息接收端实例的时候,还需要声明对于该消息接收端实例的一些基本配 置,具体包括: 消息接收端接收消息的虚拟目的地址,即消息的主题,消息发送端和消息接收端 是通过绑定在同一个消息主题上而配对的; 此外,基本配置还包括消息接收端的失败重试次数、接收消息的类型和接收消息 的并行线程池数目。 本专利技术还提供了一种轻量级消息中间件的实现系统,包括消息发送端、消息服务 器和消息接收端,其中: 消息发送端负责获取绑定在某一消息主题的消息生产者实例、消息的生产和将消 息发送到消息服务器; 消息服务器负责将接收到的消息持久化存储到数据库中、根据特定的负载均衡策 略从消息接收端集群中选出合适的目的消息接收端W及将数据库中的消息转发给目的消 息接收端; 消息接收端负责获取绑定在某一消息主题的消息接收端实例、消息的接收和消息 接收后的处理。 W44] 与现有技术相比,本专利技术具有如下有益效果: (1)本专利技术在消息持久化存储的层面采用了在大数据量下插入和读取性能更为出 色的非关系型数据库MongoDB,所W本专利技术的消息中间件系统在消息的处理速度方面会有 比较好的表现。 (2)本专利技术存储消息的结构采用了Ca卵edCollection的环状结构,避免了消息 发送成功W后对消息的删除操作;同时消息服务器将消息往消息接收端的转发采用的是 socket的定向发送的方式,替代了消息队列的使用。运两个方面的改进使得本专利技术的消本文档来自技高网...
【技术保护点】
一种轻量级消息中间件的实现方法,其特征在于,所述方法包括:(1)消息发送端生产消息,并将消息传递到消息服务器中;(2)消息服务器在收到消息后,先将消息持久化到数据库中,然后根据特定负载均衡策略从消息接收端集群中选出接收此消息的目的消息接收端,并将消息定向发送到目的消息接收端;(3)消息接收端接收到消息后,根据消息内的容进行相应的处理。
【技术特征摘要】
【专利技术属性】
技术研发人员:戴彬,张焜,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。