[发明专利]一种消息分发方法及装置有效
申请号: | 201711120287.1 | 申请日: | 2017-11-14 |
公开(公告)号: | CN107819855B | 公开(公告)日: | 2020-07-28 |
发明(设计)人: | 陈剑波;周志波 | 申请(专利权)人: | 成都路行通信息技术有限公司 |
主分类号: | H04L29/08 | 分类号: | H04L29/08 |
代理公司: | 成都智弘知识产权代理有限公司 51275 | 代理人: | 丁亮;吴新祥 |
地址: | 610041 四川省成都市高新区天*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 消息 分发 方法 装置 | ||
本发明提供一种消息分发方法及装置。该方法包括根据任务请求中的任务建立任务队列和消息队列,并将任务队列中的任务和消息队列中的消息关联,实现任务订阅。根据消息判断任务是否影响返回结果,并根据返回结果多线程执行任务中的第一任务。第一任务执行完后,向客户端发送请求结果指令。在请求结果指令传送的过程中,Django中间件捕捉能够捕捉该请求结果指令,同时根据所捕捉的请求结果指令判断是否执行第二任务,实现消息的分发以及相关任务的执行。在任务执行过程中,通过多线程方式执行,能够有效降低耗时任务的响应时间。本发明提供的消息分发方法通过Django中间件实现,不需要与第三方工具协同合作,有效降低系统执行的复杂度。
技术领域
本发明涉及消息分发技术领域,尤其涉及一种消息分发方法及装置。
背景技术
随着网络的发展以及普及,越来越多的用户通过网络查找信息以及实现数据操作。大量用户在同时使用同一网站时,容易造成服务器拥堵,导致处理速度变慢。
目前,网站的运行主要基于Django框架。Django框架的建立能够使得开发复杂的、数据库驱动的网站变得简单,进而便于数据处理。在使用Django框架时,每个进程都能够接收包含任务请求的消息,而复杂的单个任务可以通过多进程拆分为多个子任务,进而通过多进程运行Django框架,提高任务处理效率。Django框架通过多进程方式处理包含任务请求的消息时,所有的子任务完成后,才能够返回处理结果。即当某些任务请求需要服务器提供网络请求、数据库操作、大量数据计算等耗时任务时,需要服务器处理完所有事情后才能够返回客户端响应,响应时间较长,因而客户端需要一直等待,直到所有任务结束。
在基于Django框架的网站中,目前现有的消息分发方法以消息队列(RabbitMessage Queue,简称rabbitmq)、redis或数据库为消息的提供者,Celery为消息的接收者及执行者。现有的消息分发方法在消息分发过程中使用rabbitmq、redis以及Celery等第三方软件,导致系统的复杂度增加,不利于程序调试。另外,现有的的消息分发方法不能与Django的事务机制很好的结合,且在执行任务失败时不能撤回消息。
发明内容
本发明提供一种消息分发方法及装置,以解决现有消息分发方法使系统的复杂度增加得问题。
本发明提供一种消息分发方法,所述方法包括:
接收任务请求,所述任务请求中的每一个任务均包括第一任务和第二任务;
根据所述任务建立任务队列和消息队列;
将所述任务队列中的任务与所述消息队列中的消息分别关联,以实现任务订阅;
根据所述消息判断所述任务是否影响返回结果,所述返回结果为响应时间延时;
若所述任务影响所述返回结果,则直接发布与所述任务相关联的消息,多线程执行与所述消息相关联的所有任务的第一任务;
若所述任务不影响所述返回结果,则返回响应后发布与所述任务相关联的消息,执行与所述消息相关联的所有任务的第一任务;
执行完所有第一任务后,发送包含请求成功或请求不成功的请求结果指令;
Django中间件捕捉所述请求结果指令,根据所述请求结果指令判断是否执行第二任务。
优选地,所述根据所述任务建立任务队列包括:
将接收到的任务请求中的耗时任务分解为多个子任务;每一个所述子任务均包括第一任务和第二任务;所述耗时任务为影响响应返回时间的任务;
将接收到的任务和/或子任务按照接收顺序排列为任务队列。
优选地,所述耗时任务包括网络请求任务、数据库操作任务和/或大量数据计算任务。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于成都路行通信息技术有限公司,未经成都路行通信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711120287.1/2.html,转载请声明来源钻瓜专利网。