一种用于消息分配、消费的方法及装置,用于消息处理的系统的制作方法

文档序号:9219809阅读:323来源:国知局
一种用于消息分配、消费的方法及装置,用于消息处理的系统的制作方法
【技术领域】
[0001] 本申请涉及消息处理技术领域,具体涉及一种用于消息分配的方法及装置,以及 一种用于消息消费的方法及装置。本申请同时涉及一种用于消息处理的系统。
【背景技术】
[0002] 面向消息的中间件(也称为消息中间件,M0M),提供了以松散耦合的灵活方式集成 应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应 用程序彼此不直接通信,而是与作为中介的M0M通信。M0M提供了有保证的消息发送,应用 程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。
[0003] 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据 通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境 下扩展进程间的通信。
[0004] 消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系 统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。发送者将消息发 送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接 收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性, 实现应用程序之间的协同,其优点在于能够在客户和服务器之间提供同步和异步的连接, 并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步 的原因。
[0005] 在现有的消息中间件中,消息分配机制为基于先进先出(FIFO)的推送机制,所谓 先进先出是指消息由生产者发送至中间件后,在消息中间件中排队等候发送,先进入消息 中间件的消息最先由该消息中间件转发出去。所谓推送机制为消息消费者只能被动的监听 消息中间件的发送情况,在中间件转发推送相应的消息后,消息到达后才开始消费消息。具 体而言,FIFO队列模式,为消息中间件首先从一堆消费者中取模得到特定消费者,然后将队 列中首个消息推送给该消费者,以此类推,将队列中的消息推送出去。若消息需回滚,需主 动通知生产者,消息中间件不支持消息的重发或是回滚操作。
[0006] 消息的消费速度受限于消息中间件的转发能力,且消息分配方式以平均优先为 主,比如按照客户端数量取模。为尽可能的达到平均以及时间顺序性的前提下,这种模式要 求很高:a)消费端性能必须一样,性能不一样的消费端可能引起性能差异带来的消息积压 或性能问题;b)不能容忍异常情况,异常时消费速度遇到变化时,消息中间件无法感知,进 而造成因平均分配带来事实上的资源分配不均。

【发明内容】

[0007] 本申请提供一种用于消息分配的方法和装置,以解决现有消息处理的上述的问 题。本申请另外提供一种用于消息消费的方法和装置,以及一种用于消息处理的系统。
[0008] 本申请提供的一种用于消息分配的方法,包括:
[0009] 获取满足消息消费活跃度阈值的消息消费者列表;
[0010] 对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低的顺序依次向 消息消费者分配消息队列中的消息。
[0011] 可选的,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
[0012] 接收消息消费者发送的该消费者的当前活跃度值;
[0013] 计算该当前活跃度值与历史最大活跃度的比值;
[0014] 将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息 消费活跃度阈值的消息消费者。
[0015] 可选的,所述当前活跃度值为表征消息消费者当前服务能力值的单机耗时、是否 消费成功和单机每秒事务处理量中的至少一种及其权重的加权平均数。
[0016] 可选的,所述获取满足消息消费活跃度阈值的消息消费者列表包括:
[0017] 接收消息消费者发送的表征消息消费者当前服务能力值的单机耗时、是否消费成 功和单机每秒事务处理量中的至少一种以及相应的权重;
[0018] 计算所述当前服务能力值及其权重的加权平均数,并将该加权平均数作为该消息 消费者的当前活跃度值;
[0019] 计算所述当前活跃度值与该消息消费者历史最大活跃度值的比值;
[0020] 将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息 消费活跃度阈值的消息消费者。
[0021] 可选的,所述消息消费者活跃度阈值通过所有注册在线的消费者的当前活跃度的 平均值与其总和的比值获得。
[0022] 可选的,所述对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到低 的顺序依次向消息消费者分配消息队列中的消息包括:
[0023] 对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的顺序将消息消费 者分为不同的组,每一分组中包括至少两个消息消费者;
[0024] 按照活跃度由高至低的顺序,依次向每一分组的消费者分配待消费消息;
[0025] 对于每一分组中的消费者,按照机会均等原则向消息消费者分配待消费消息。
[0026] 可选的,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待 消费消息具体包括:
[0027] 获取分组中每一消息消费者的消费者ID及在分组中消费者数目;
[0028] 对所述消费者ID执行hash取模运算;
[0029] 向满足hash取模运算结果的消费者分配待消费消息。
[0030] 可选的,所述取模运算具体为hash按余取模运算。
[0031] 可选的,所述对于每一分组中的消费者,按照机会均等原则向消息消费者分配待 消费消息具体是指:依据先进先出原则的原则,将消息队列中的消息按照接收机会均等原 则向消息消费者分配待消费消息。
[0032] 相应的,本申请还提供一种用于消息分配的装置,其包括:
[0033] 获取单元,用于获取满足消息消费活跃度阈值的消息消费者列表;
[0034] 分配单元,用于对于满足消息消费活跃度阈值的消息消费者,依据活跃度由高到 低的顺序依次向消息消费者分配消息队列中的消息。
[0035] 可选的,所述获取单元包括:
[0036] 接收单元,用于接收消息消费者发送的该消费者的当前活跃度值;
[0037] 计算单元,用于计算该当前活跃度值与历史最大活跃度的比值,并将所述比值大 于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费活跃度阈值的消息 消费者。
[0038] 可选的,所述获取单元包括:
[0039] 交互单元,用于接收消息消费者发送的表征消息消费者当前服务能力值的单机耗 时、是否消费成功和单机每秒事务处理量中的至少一种以及相应的权重;
[0040] 活跃度计算单元,用于计算所述当前服务能力值及其权重的加权平均数,并将该 加权平均数作为该消息消费者的当前活跃度值;
[0041] 计算单元,用于计算所述当前活跃度值与该消息消费者历史最大活跃度值的比 值;并将所述比值大于或等于所述消息消费者活跃度阈值的消息消费者作为满足消息消费 活跃度阈值的消息消费者。
[0042] 可选的,所述分配单元包括:
[0043] 分组单元,用于对于满足消息消费活跃度阈值的消费者,按照活跃度由高到低的 顺序将消息消费者分为不同的组,每一分组组中包括至少两个消息消费者;
[0044] 按组分配单元,用于按照活跃度由高至低的顺序,依次向每一分组的消费者分配 待消费消息;
[0045] 组内消息分配单元,用于对于每一分组中的消费者,按照机会均等原则向消息消 费者分配待消费消息。
[0046] 可选的,所述组内消息分配单元包括:
[0047] 消费者ID获取单元,用于获取分组中每一消息消费者的消费者ID;
[0048] 取模运算单元,用于对所述消费者ID执行hash取模运算;
[0049] 执行单元,用于向满足hash取模运算结果的消费者分配待消费消息。
[0050] 可选的,所述取模运算单元,具体用于对所述消费者ID执行hash按余取模运算;
[0051] 可选的,所述组内消息分配单元,具体用于依据先进先出原则的原则,将消息队列 中的消息按照接收机会均等原则向消息消费者分配待消费消息。
[0052] 此外,本申请还提供一种用于消息消费的方法,其包括:
[0053] 获取由消息中间件推送的消息并消费该消息;
[0054] 获取该消费者消费消息的当前服务能力值及各种表征当前服务能力值的各个参 数权重;
[0055] 将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数及其权重 的加权平均作为活跃度值反馈至所述消息中间件;或者按照设定的时间周期向消息中间件 反馈所述当前消费服务能力值或活跃度值。
[0056] 可选的,所述表征当前服务能力值的参数包括:消息消费者消费该消息的单机耗 时、是否消费成功和单机每秒事务处理量中的至少一种。
[0057] 相应的,本申请还提供一种用于消息消费的装置,其包括:
[0058] 消息获取消费单元,用于获取由消息中间件推送的消息并消费该消息;
[0059] 当前服务能力监测单元,用于获取该消费者消费消息的当前服务能力值及各种表 征当前服务能力值的各个参数权重;
[0060] 反馈单元,将所述当前消费服务能力值或者表征所述当前服务能力值的各个参数 及其权重的加权
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1