python消息队列celery_消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?...

写这篇博文的起因是,我在论坛宣传我开源的新项目YTask(go语言异步任务队列)时,有小伙伴在下面回了一句“为什么不用nsq?”。这使我想起,我在和同事介绍celery时同事说了一句“这不就是kafka吗?”。

那么YTask和nsq,celery和kafka?他们之间到底有什么不同呢?下面我结合自己的理解。简单的分析一下,如有不足请指出。

c027a3434b6bf507153ac0b24a38ff859ca.jpg

首先,nsq和kafka它们属于消息队列;YTask和celery它们属于任务队列。

消息队列和任务队列,最大的不同之处就在于理念的不同 -- 消息队列传递的是“消息”,任务队列传递的是“任务”。

%E6%94%AF%E4%BB%982.png

这句话何解呢?

mq2.jpeg

我们可以放到具体的应用场景上:

消息队列用来快速消费队列中的消息。比如日志处理场景,我们需要把不同服务器上的日志合并到一起,这时就需要用到消息队列。

任务队列是用来执行一个耗时任务。比如用户在购买的一件物品后,通常需要计算用户的积分以及等级,并把它们保存到数据库。这时就需要用到任务队列。

从上面的例子可看出:

消息队列更侧重于消息的吞吐、处理,具有有处理海量信息的能力。另外利用消息队列的生长者和消费者的概念,也可以实现任务队列的功能,但是还需要进行额外的开发。

任务队列则提供了执行任务所需的功能,比如任务的重试,结果的返回,任务状态记录等。虽然也有并发的处理能力,但一般不适用于高吞吐量快速消费的场景。

任务队列其实和远程函数调用差不多,但和thrift、grpc什么不同,它不需要定义描述文件,调用的方式也不是网络请求方式,而是利用消息队列传递任务信息。

ff2.jpg

因此可以简单认为任务队列就是消息队列在异步任务场景下的深度化定制开发。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、Celery 是一个分布式任务队列/消息传递系统,可以用于异步任务处理、定时任务调度等。它具有以下功能: - 异步任务处理:Celery 可以将耗时的任务放入队列,让其他进程或机器异步执行,提高系统的并发性能。 - 周期性任务调度:Celery 可以设定定时任务,按照设定的时间间隔或时间点执行任务。 - 超时任务处理:Celery 可以监控任务的执行时间,并在超过设定的超时时间后自动终止任务。 - 错误重试:如果任务执行失败,Celery 可以自动重试,提高任务的可靠性。 - 任务结果存储:Celery 可以将任务的执行结果存储在后端存储中,供后续查询使用。 2、Celery 可以通过创建多个队列,并使用不同的路由规则来实现不同队列执行不同任务。具体步骤如下: - 配置 Broker:在 Celery 的配置文件中,配置多个 Broker(例如 RabbitMQ 或 Redis),每个 Broker 对应一个队列。 - 定义任务:使用 Celery 的 `@task` 装饰器定义多个任务函数,并为每个任务函数指定队列的名称。 - 配置路由规则:在 Celery 的配置文件中,配置多个路由规则,将不同队列任务关联到相应的 Broker。 - 启动 Worker:启动多个 Celery Worker 进程,每个进程连接到相应的 Broker。 - 提交任务:通过调用任务函数,并指定队列的名称,将任务提交到相应的队列。 这样,不同队列中的任务将被分发到不同的 Worker 进程执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值