败,则执行步骤S214。
[0073] 步骤S212 :消息发布组件将发送任务消息的网络连接返回给其连接池,并判断该 网络连接的当前连接状态,根据判断结果,将该网络连接设置为有效的网络连接或者无效 的网络连接,结束本次任务消息发送过程。
[0074] 当任务消息发送成功后,及时将网络连接资源返回给连接池,能够使其它任务消 息有足够的网络连接资源可用;而通过判断返回的网络连接的当前连接状态,确定该网络 连接的有效或失效,则向组件提供了网络连接的及时的、可靠的信息,以保障任务的高效处 理。
[0075] 步骤S214 :消息发布组件重新选择一个有效的网络连接发送任务消息,并中断之 前选择的网络连接,释放该网络连接的资源,将该网络连接设置为失效的网络连接;并且, 记录该网络连接中断的时间点,在设定的时间间隔内,不再使用该网络连接发送任何任务 消息。
[0076] 时间间隔由本领域技术人员依据网络状况,如网络带宽或者该网络连接经过的交 换机的数量等,灵活设置,本申请对此不作限制。
[0077] 步骤S216 :当经过设定的时间间隔后,消息发布组件接收到新的任务消息,尝试 恢复中断的网络连接。
[0078] 步骤S218 :判断尝试恢复中断的网络连接是否成功,若成功,则将该网络连接设 置为有效的网络连接,返回步骤S204;若失败,则重新设置该网络连接中断的时间点,在设 定的时间间隔内,不再使用该网络连接发送任何任务消息,返回步骤S216。
[0079] 重连时间间隔采用固定的时间间隔,以方便操作和实现。因此,本步骤中的设定的 时间间隔与步骤S214中的时间间隔一致。
[0080] 在大规模分布式集群中,连接失效的原因有很多,如网络的暂时故障。如何有效的 恢复这些失效连接,成为了管理的重要的问题。本申请中,引入了重连时间的设定,即设定 一个时间间隔。当一个连接失效后,会按照失效时间点向后,选择一个重连时间,在重连时 间之前的请求,将不会尝试对连接进行恢复,以减少连接重试的开销。当有请求在重连时间 之后到来,将尝试恢复该网络连接,若恢复失败,则再次设置重连时间;若成功,则将该连接 返回提供给消息组件进行通信。
[0081] 步骤S220 :将消息发布组件的连接池中所有的网络连接的中断时间点设置为当 前时间点,并尝试恢复该连接池中所有的网络连接;然后,返回步骤S204。
[0082] 当连接池中所有连接都已经失效时,将取消所有连接的重连时间,因为这时消息 发布组件已经无法提供任何连接供通信使用,消息发布组件已经无法正常完成流水线的处 理,此时应该尽快恢复网络连接,保证任务的正常处理。优选地,将连接池中所有的网络连 接的中断时间点设置为当前时间点,方便中断时间点设置,及后续间隔时间计算,便于实 现。
[0083] 通过本实施例,有效保证了任务消息的发送,进而保证了任务的处理,避免了因节 点失效造成分布式消息队列系统的集群处理能力下降的问题,保证了多道流水线处理系统 的集群处理能力。
[0084] 需要说明的是,本实施例仅以消息发布组件为例,对任务消息的处理作以说明,但 本领域技术人员应当明了,分布式消息队列的其它组件均可参照本实施例对任务消息进行 了相应地处理。
[0085] 实施例三
[0086] 参照图4,示出了根据本申请实施例三的一种任务处理方法的步骤流程图。
[0087] 本实施例在图3所示实施例的基础上,在各个组件上设置负载均衡算法,增加负 载均衡功能,以对网络连接或任务消息进行负载均衡。并且,将分布式消息队列的各个组 件中的连接池分别封装为网络连接循环队列,同时在消息中转组件中设置消息优先级队 列。也就是说,消息中转组件中设置有网络连接循环队列和消息优先级队列,而消息发布组 件和消息处理组件因不会临时存储任务消息,所以这两个组件中仅设置有网络连接循环队 列,而没有消息优先级队列。
[0088] 本实施例以消息中转组件为例,对其根据负载均衡算法进行消息处理及网络连接 选择进行说明。需要说明的是,因消息发布组件和消息处理组件仅设置有网络连接循环队 列,因此,可以仅参照本实施例的消息中转组件的网络连接选择方法进行负载均衡。
[0089] 本实施例的任务处理方法包括以下步骤:
[0090] 步骤S302 :消息发布组件将任务消息传递至消息中转组件。
[0091] 其中,消息发布组件根据设定的负载均衡算法,从其自身的网络连接循环队列中 选择一个有效的网络连接,将任务消息传递给消息中转组件。
[0092] 本实施例中,设定各个组件均使用LRU (Least Recently Used)算法进行网络连接 的负载均衡。在选择有效网络连接时,将从网络连接循环队列的头部提取一个有效的网络 连接,返回给组件进行通信。当通信完成后,该连接将会被放入网络连接循环队列的尾部。 网络连接循环队列初始化状态时的示意图和申请连接后状态的示意图分别如图5和图6所 不〇
[0093] 通过这种方式,实现了一个完整的LRU算法,并使得所有的组件都可以使用该算 法进行连接的管理,以实现全局的负载均衡。使用LRU算法,实现简单,且查找有效网络连 接快速高效。当然,不限于此,本领域技术人员在实际时,可以采用任意适当的负载均衡算 法,本申请对此不作限制。
[0094] 步骤S304 :消息中转组件依次将任务消息插入消息优先级队列的尾部,并将该任 务消息设置为可见状态。
[0095] 步骤S306 :消息中转组件根据设定的负载均衡算法,从消息优先级队列中选择一 个可见状态的任务消息。
[0096] 本实施例中,设定消息优先级队列中先进先出FIFO方式的队列。消息中转组件从 消息优先级队列头部开始,向后查找第一个可见状态的任务消息,作为当前待处理的任务 消息。
[0097] 消息优先级队列是为了保证任务消息可以可靠、公平的进行处理而设计的。该队 列使用先进先出(FIFO)的方式,对任务消息进行管理,这保证了消息在时序上的公平性, 即先提交的任务,可以得到优先的处理,同时也不影响后续提交的任务的正确调度。
[0098] 步骤S308 :消息中转组件将任务消息发送至消息处理组件。
[0099] 本步骤中,消息中转组件根据LRU算法,从自身的网络连接循环队列中选择一个 有效的网络连接,将任务消息发送给消息处理组件。
[0100] 步骤S310 :消息中转组件将发送出去的任务消息设置为不可见状态,并等待消息 处理组件的回复。
[0101] 步骤S312 :消息中转组件根据消息处理处理的回复,对该任务消息进行处理;然 后,返回步骤S306。
[0102] 如果任务处理组件处理该任务消息成功,消息中转组件将删除该任务消息;如果 任务处理组件处理该任务消息不成功,消息中转组件将重新将该任务消息设置为可见状 o
[0103] 本实施例重点对分布式消息队列中各个组件的负载均衡进行了说明,而对网络连 接的选择和处理部分描述的较为简单,本领域技术人员在具体实施时,可以参照实施例二 中的相关方法进行有效网络连接的选择和后续相关处理,在此不再赘述。
[0104] 在大规模分布式环境下,单个节点的能力是有限的,通常只能够满足某一类任务 性能要求的几分之一,甚至几十分之一,这就要求整个的多道流水线处理系统,能够充分利 用目前所有已知节点进行任务的处理。目前的各类分布式消息队列系统,对于负载均衡的 问题,都没有给出合理的解决方案,多数只是依赖于系统的调度策略进行调节。这样将造成 部分节点负载过高,但系统仍然没有充分利用所有处理节点的处理能力,大量节点的能力 被浪费。通过本实施例,不但解决了分布式消息队列中,因节点失效造成集群处理能力下降 的问题,而且解决了分布式消息队列的负载均衡问题,使得整个系统中的全部处理任务能 够均匀地分配到每个处理节点中。
[0105] 实施例四
[0106] 参照图7,示出了根据本申请实施例四的一种任务处理装置的结构框图。
[0107] 本实施例的任务处理装置包括:连接池,用于存储所述分布式消息队列中各个组 件之间的网络连接的信息;接收模块402,用于在多道流水线处理系统的分布式消息队列 中的至少一个组件中接收任务消息;选择模块404,用于根据网络连接的信息,从连接池中 选择一个有效的网络连接;连接模块406,用于使用选择的有效的网络连接发送任务消息, 进行任务消息所请求的任务处理。
[0108] 优选地,分布式消息队列的每个组件中均设置有连接池,每个组件的连接池用于 存储本组件与其它组件之间的网络连接的信息;选择模块404,用于根据网络连接的信息, 从接收到任务消息的组件的连接池中选择一个有效的网络连接。
[0109] 优选地,本实施例的任务处理装置还包括:失败模块408,用于若连接模块406使 用选择的有效的网络连接发送任务消息失败,则重新选择一个有效的网络连接发送任务消 息,并中断失败的网络连接并释放其资源,将该网络连接设置为失效的网络连接;记录该网 络连接中断的时间点,在设定的时间间隔内,不再使用该网络连接发送任何任务消息。
[0110] 优选地,本实施例的任务处理装置还包括:重连模块410,用于当经过设定的时间 间隔后,接收模块402接收到新的任务消息,尝试恢复中断的网络连接。
[0111] 优选地,本实施例的任务处理装置还包括:重连设置模块412,用于若重连模块 410尝试恢复中断的网络连接失败,则重新设置该网络连接中断的时间点,在设定的时间间 隔内,不再使用该网络连接发送任何任务消息;若尝试恢复中断的网络连接成功,则将该网 络连接设置为有效的网络连接。