用于消息队列下发消息的方法和消息下发装置的制造方法

文档序号:8433657阅读:282来源:国知局
用于消息队列下发消息的方法和消息下发装置的制造方法
【技术领域】
[0001]本申请涉及计算机网络通信领域,特别涉及一种用于消息队列下发消息的方法以及消息下发装置。
【背景技术】
[0002]消息队列是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从源中继到目标时充当中间人。消息队列的主要目的是提供路由并保证消息的传递。如果发送消息失败,消息队列会保留该消息,直到可以成功地传递。
[0003]传统消息队列是根据“先进先出”的队列自定义的方式进行下发的,后来有了队列和栈互相转换的方式,这就实现了消息可以根据实际情况进行“先进先出”或“后进先出”的方式进行下发,但是这些方法都无法解决队列下发消息实时优先级的商业需求。人们最终想到了依赖关系型数据库的特征,把队列存入数据表,再通过排序命令处理下发序列,按顺序下发消息。但是这种方式还存在缺陷,当下发通道出现堵塞,数据表中的序列无法出列时,新入列的消息就无法发挥优先权,只能等待之前堵塞的队列下发结束了,才能接着下发,这样会存在下发时间的延误情况。

【发明内容】

[0004]针对上述现有技术存在的缺陷,根据本申请的一个方面,提供了一种用于消息队列下发消息的方法,包括:接收所述消息进入所述消息队列的请求,获取所述消息的参数信息,根据所述消息的参数信息确定所述消息的优先级,根据所述消息的优先级将所述消息插入到所述消息队列中;将所述消息队列中的各个消息按优先级的顺序进行下发。
[0005]本方法能够优化消息出列的时间,确保了关键业务能够快速处理,避免了权重较轻的消息长时间的延时,降低了系统应用风险,提高了用户的实时交互体验。
[0006]在一些实施方式中,所述消息队列保存在一个缓存区,通过一个应用程序编程接口接收消息入列的请求。其中,利用一个应用程序编程接口接收消息入列的请求,该接口可以与其它运用程序相连接,比常规的写入数据库或介质的方法的运用范围广。且运用此接口无需访问源码,或理解内部工作机制的细节,这样使操作简单、快捷。
[0007]在一些实施方式中,当下发所述消息队列中某个消息失败时,根据获取的该消息当前的权重和时间系数,确定该消息当前的优先级,按该消息当前的优先级重新插入所述消息队列,将所述消息队列中的各个消息按当前的优先级顺序进行下发。
[0008]在一些实施方式中,所述消息的优先级是通过所述消息的权重和所述消息的时间系数综合确定的。其中,通过消息的权重和时间系数不同运算,可以形成很多种消息的优先级,使消息下发顺序的选择更广、更科学。
[0009]在一些实施方式中,所述消息的优先级是通过所述消息的权重和所述消息的时间系数的乘积确定的。当然,针对不同情况,会对不同参数的重视程度不同,本申请可以采用幂次方或者函数等其它运算方法。对本领域的技术人员来说,可以对上述公式的参数进行改动,或者对参数之间的关系进行其它修改或运算。
[0010]在一些实施方式中,所述消息队列中的各个消息的时间系数在每次消息的下发后进行更新。其中,时间系数的更新确保了消息优先权随着时间的变化而不断增大,确保了消息及时出列。
[0011]在一些实施方式中,所述消息队列中的各个消息的优先级在每次消息的下发后进行更新。其中,消息优先级的更新,满足了商业变化的需求。
[0012]在一些实施方式中,将所述消息进行封装、转换成可识别的推送实体,将所述推送实体提交到运营网关,由所述运营网关下发所述推送实体。在一些实施方式中,所述将所述消息队列中的各个消息按所述优先级的顺序进行下发还包括,将所述下发消息的状态信息存入消息状态库。通过一个线程进行监听缓存区内的所述消息队列,根据所述消息队列中所述各个消息的优先级进行下发所述各个消息。
[0013]根据本申请的另一方面,提供消息下发装置,包括:优先级确定单元,接收所述消息进入所述消息队列的请求,获取所述消息的参数信息,根据所述消息的参数信息确定所述消息的优先级,根据所述消息的优先级将所述消息插入到所述消息队列中;消息下发单元,将所述消息队列中的各个消息按所述优先级顺序地下发。
[0014]在上述装置中,所述优先级确定单元可包括:优先级更新单元,当下发所述消息队列中的消息失败时,根据获取的该消息当前的权重和时间系数,确定该消息当前的优先级,按该消息当前的优先级重新插入所述消息队列,和/或消息封装单元,将所述消息进行封装、转换成可识别的推送实体,提交到运营网关,以由所述运营网关下发所述推送实体。
[0015]上述方法和装置能够满足商业需求的灵活实时优先级排序。所述优先级排序通过例如消息权重、入栈时间等来综合确定。当消息进入队列时接收权重声明,再根据入栈时间插入到合理的队列位置。上述优先级随着各个消息的时间系数在每次消息的下发后的更新而更新。因此,能够优化消息出列的时间,确保了关键业务能够快速处理,避免了权重较轻的消息长时间的延时,降低了系统应用风险,提高了用户的实时交互体验。
【附图说明】
[0016]图1为本申请一实施方式的用于消息队列下发消息的流程示意图;
[0017]图2为本申请一实施方式的消息下发装置的结构框图。
【具体实施方式】
[0018]下面结合附图对本申请作进一步详细的说明。
[0019]图1示意性地显示了本申请一实施方式的用于消息队列下发消息的流程示意图。如图所示,该实施方式的方法包括一个正向流程的进程和一个自循环过程的进程。具体包括:
[0020]进程1:接收所述消息进入所述消息队列的请求,获取所述消息的参数信息,根据所述消息的参数信息确定所述消息的优先级,根据所述消息的优先级将所述消息插入到所述消息队列中。该进程包括:
[0021]步骤SlOl:接收消息入列请求。
[0022]下发消息队列保存在一个公共的缓存区中。根据本实施方式,可以提供一个API (Applicat1n Programming Interface,应用程序编程接口)用于接收消息入列请求。其中,API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。它使得应用程序与开发人员无需访问源码,或理解内部工作机制的细节。本实施例中API接收应用单元传递过来的入列请求。下面示例性地给出了该接收应用单元的函数定义示例:
[0023]//入列接口
[0024]public String push(PushVO pushVO);
[0025]Il异步检测客户端是否收到推送
[0026]public int checkClientPush(String msgldStr);
[0027]另外,消息入列也可以使用常规的写入数据库或介质的方法,然后使用独立的程序遍历对入列的消息进行下发。
[0028]上述消息在请求入列时进行消息权重申明,并请求队列提供一个消息实体,所述消息实体包括消息的接收者、下发的内容和可选的权重值。消息队列接收消息进入消息队列的请求。权重是由应用项目单元自行分配的,其分配条件也是由应用项目单元根据业务具体设计。通过使用时间系数,可以使低权重消息也有比高权重消息的优先级高的机会,避免低权重堵塞。
[0029]步骤S102:获取所述消息的权重、所述消息当前时间系数(消息在队列中的时间),通过所述消息的权重和所述消息的时间系数,来综合确定所述消息的优先级,其方式例如为:
[0030]消息的优先级=消息的权重*消息当前时间系数。
[0031]上述公式示意性地反应了消息的优先级,同时计算起来也相对简单,便于直观地反映和选择较高的优先级。对本领域的技术人员来说,针对不同情况,对不同参数的重视程度不同,本申请除了乘法运算外,还可以采用幂次方或者函数等其它运算方法。对本领域的技术人员来说,可以对本申请中公式的参数进行改动,或者对参数之间的关系进行其它修改或运算,这些均属于本申请创造构思,在本申请的保护范围之内。
[0032]步骤S103:根据进入队列的优先级的大小顺序(高低顺序)将上述消息插入到消息队列缓存区中,形成待下发消息的消息队列。例如,优先级越大,则该消息插入到缓存区中出列越早的位置。
[0033]进程2:将所述消息队列中的各个消息按优先级顺序进行下发。该进程包括:
[0034]步骤S201:在上述步骤S104中,消息不断进入队列,形成待下发消息的消息队列。
[0035]步骤S202:采用一个线程监听消息队列缓存区,当监听到消息队列缓存区内存在待下发消息时,按消息由大至小的优先级顺序,获取下发消息的集合(指定下发消息行数)。
[0036]步骤S203:消息进入时,对消息实体进行封装,此封装过程是融合了消息实体对第三方运营商的约束条件(诸如各运营商的接收元素名、业务标识码、设备标识码等等)和自身业务通性(例如消息体内包含的业务事件标识码:下线、通
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1