文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用django+celery+RabbitMQ自定义多个消息队列

2023-07-05 05:26

关注

本篇内容主要讲解“怎么使用django+celery+RabbitMQ自定义多个消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用django+celery+RabbitMQ自定义多个消息队列”吧!

本文使用版本

celery.py

from __future__ import absolute_import, unicode_literalsimport osfrom celery import Celeryfrom kombu import Exchange, Queue# set the default Django settings module for the 'celery' program.os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zkcelery.settings')app = Celery('zkcelery')# Using a string here means the worker doesn't have to serialize# the configuration object to child processes.# - namespace='CELERY' means all celery-related configuration keys#   should have a `CELERY_` prefix.app.config_from_object('django.conf:settings', namespace='CELERY')# Load task modules from all registered Django app configs.app.autodiscover_tasks()# 看了一篇文章说,如果使用redis做broker,exchange可以不配置;但如果使用rabbitMQ做broker,就必须要配置。queue = (    Queue('default', exchange=Exchange('default', type='direct'), routing_key='default'),    Queue('q1', exchange=Exchange('e1', type='direct'), routing_key='r1'),    Queue('q2', exchange=Exchange('e2', type='direct'), routing_key='r2'),    Queue('q3', exchange=Exchange('e3', type='fanout'), routing_key='r3'),)# 一旦配置了route后,所有的任务名都必须要指定route,否则任务无法执行。# 经过测试,route匹配是最长匹配规则。route = {    'apps.zhiding.tasks.add': {'queue': 'q1', 'routing_key': 'r1'},    'apps.zhiding.tasks.multiply': {'queue': 'q2', 'routing_key': 'r2'},    # 其它的任务名称,匹配这条路由    # 如果以上队列的worker服务器坏了,这些任务会被全部放进这个队列里,该队列的worker将继续处理这些任务    # 下面这条队列一定要配置,否则其它任务无法处理。    '*': {'queue': 'default', 'routing_key': 'default'},}app.conf.update(CELERY_QUEUES=queue, CELERY_ROUTES=route)

tasks.py

from celery import shared_taskimport time@shared_taskdef add(x, y):    time.sleep(2)    print('任务睡眠2秒后执行了')    return x + y@shared_taskdef multiply(x, y):    time.sleep(5)    print('任务睡眠5秒后执行了')    return x * y@shared_taskdef sub(x, y):    time.sleep(4)    print('任务睡眠4秒后执行了')    return x - y

笔者也看了很多博文,在settings.py配置文件中写入CELERY_QUEUESCELERY_ROUTES,上面的配置对应下来就是如下代码块:

CELERY_QUEUES = (    Queue('default', exchange=Exchange('default', type='direct'), routing_key='default'),    Queue('sq1', exchange=Exchange('sq1', type='direct'), routing_key='sq1'),    Queue('sq2', exchange=Exchange('sq2', type='direct'), routing_key='sq2'),    Queue('sq3', exchange=Exchange('sq3', type='fanout'), routing_key='sq3'),)CELERY_ROUTES = {    'apps.zhiding.tasks.add': {'queue': 'sq1', 'routing_key': 'sq1'},    'apps.zhiding.tasks.multiply': {'queue': 'sq2', 'routing_key': 'sq2'},    '*': {'queue': 'default', 'routing_key': 'default'},}

但是笔者在实际使用中发现后面这种方式配置始终未生效,不知道是不是笔者版本的不同,没有做更多的研究,如果你能找到问题的原因,欢迎评论交流。

启动worker

# 笔者使用的windows,启动时需要加上-P eventletcelery -A zkcelery worker -l info -P eventlet

启动后队列中出现配置中的个队列

怎么使用django+celery+RabbitMQ自定义多个消息队列

同时会在rabbitmq中创建(如果不存在)4个队列,交换机和相应的绑定关系(当然也可以直接通过rabbitmq管理端直接创建自己需要的队列、交换机和绑定,具体根据个人习惯或者视工作场景而定选择)

怎么使用django+celery+RabbitMQ自定义多个消息队列

以队列q1示例:

怎么使用django+celery+RabbitMQ自定义多个消息队列

暂时先关闭worker,便于观察消息队列中的消息。
向队列中发送几条消息,消息均进入到配置中指定的queue中

怎么使用django+celery+RabbitMQ自定义多个消息队列

再次启动worker,队列中的消息立马被消费

怎么使用django+celery+RabbitMQ自定义多个消息队列

如何做到消费指定的队列中的消息,只需要启动的时候加上参数Q

# -Q指定消费的队列# -n 指定worker节点的名称,避免启动多个时的重名冲突celery -A zkcelery worker -l info -Q q1 -n node1 -P eventlet

可以看到终端中queues只有q1了

怎么使用django+celery+RabbitMQ自定义多个消息队列

q1中的消息被消费掉了,其他队列没有变化

怎么使用django+celery+RabbitMQ自定义多个消息队列

也可以同时指定多个消费队列

celery -A zkcelery worker -l info -Q q2,default -n node2 -P eventlet

怎么使用django+celery+RabbitMQ自定义多个消息队列

当然也可以在生产方指定推送的队列,举例如下:

怎么使用django+celery+RabbitMQ自定义多个消息队列

到此,相信大家对“怎么使用django+celery+RabbitMQ自定义多个消息队列”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯