当前位置: 首页 > news >正文

【星海出品】rabbitMQ - 叁 应用篇

rabbitMQ 的基础知识这里就不阐述了,可以参看我早年写的文章 -> rabbitMQ 入门
https://blog.csdn.net/weixin_41997073/article/details/118724779

Celery 官网:http://www.celeryproject.org/
Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html
Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/

celery 还有定时运行,redis 缓冲使用等高级特性,可以参看 Celery的官网进行研究。

这里讲些 rabbitMQ 如何与程序嵌入,使用的是 django 的基础框架

django 使用celery 插件,在配置文件配置,并启动 celery 就可以与 rabbitMQ 进行交互
配置如下

INSTALLED_APPS = ['rest_framework',
]
from celery import Celery
from kombu import QueueCELERY_WORKER_POOL = 'prefork'  # 禁用gevent池
CELERY_BROKER_URL = 'amqp://test:test_password@localhost:5672/test_vhost'
CELERY_RESULT_BACKEND = 'django-db'  # 使用数据库存储结果
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = False
CELERY_TASK_TRACK_STARTED = True
CELERY_RESULT_EXPIRES = 3600  # 任务结果保存1小时CELERY_WORKER_CONCURRENCY = 4
# [ IO 密集型, 每个worker进程可以预取 并发数 × 预乘数 个任务到内存中 ]
# 设置为1000,表示每个worker进程处理1000个任务后会自动重启
CELERY_WORKER_PREFETCH_MULTIPLIER = 1
CELERY_WORKER_MAX_TASKS_PER_CHILD = 1000
CELERY_TASK_ACKS_LATE = True# Celery 队列配置
CELERY_TASK_QUEUES = (Queue('default', routing_key='task.default'),Queue('high_priority', routing_key='task.high_priority'),Queue('celery', routing_key='task.celery'),
)# Celery 路由配置
CELERY_TASK_ROUTES = {'metadata.tasks.process_rabbitmq_message': {'queue': 'high_priority','routing_key': 'task.high_priority'},'metadata.tasks.async_update_record': {'queue': 'default','routing_key': 'task.default'},
}# CELERY_TASK_QUEUES = (
#     Queue('high_priority', Exchange('high_priority'), routing_key='high_priority'),
#     Queue('default', Exchange('default'), routing_key='default'),
#     Queue('low_priority', Exchange('low_priority'), routing_key='low_priority'),
# )MONKEY_PATCH_SETTINGS = {'subprocess': False,'thread': False,  # 禁用线程补丁
}

注意:
django创建的数据模型需要手动迁移,还有rabbitMQ 的虚拟主机和队列也需要进行验证,确保可用。

在 django 的主入口 url 目录中建立celery 脚本 ,并在该目录的初始化 init 配置文件中添加 celery 信息
就可以在 django 的 manage.py 平级目录使用 celery 进行启动与 rabbitMQ 的交互 。

celery -A djangoProjectMetaDataManagement worker --loglevel=info -Q high_priority,defaultcelery -A djangoProjectMetaDataManagement.celery worker --loglevel=info为了安装考虑看情况也可以创建一个独立的用户运行celery
# 创建专用用户
useradd celeryuser# 使用非 root 用户运行
celery -A djangoProjectMetaDataManagement.celery worker --loglevel=info --uid=celeryuser --gid=celeryuser

celery.py

import os
from celery import Celery
from kombu import QueueCELERY_BROKER_URL = 'amqp://test:test_password@localhost/test_vhost'
CELERY_RESULT_BACKEND = Noneos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProjectMetaDataManagement.settings')app = Celery('djangoProjectMetaDataManagement')
#app.config_from_object('django.conf:settings', namespace='CELERY')# 使用 Django 的设置文件配置 Celery
app.config_from_object('django.conf:settings', namespace='CELERY')app.conf.update(worker_prefetch_multiplier=1,  # 每个Worker进程每次只预取1个任务worker_max_tasks_per_child=100, # 可选:限制每个Worker进程处理的任务数后重启
)app.conf.task_queues = (Queue('default'

文章转载自:

http://ApeTZzo2.srgnd.cn
http://iN7Lug3G.srgnd.cn
http://L8CeX4r8.srgnd.cn
http://uEK2vYpe.srgnd.cn
http://FpKhTJ8n.srgnd.cn
http://Hw429K2k.srgnd.cn
http://zCw63wqG.srgnd.cn
http://wnOD9piw.srgnd.cn
http://30JSKP5U.srgnd.cn
http://OyASFl2J.srgnd.cn
http://fO1kzAXg.srgnd.cn
http://SRGsQiRN.srgnd.cn
http://KIOFhru6.srgnd.cn
http://603VyGjq.srgnd.cn
http://cP9IM2jk.srgnd.cn
http://3WY7NHDE.srgnd.cn
http://OJRmd0dQ.srgnd.cn
http://KxyjDD9I.srgnd.cn
http://whDL4WHC.srgnd.cn
http://kz2ONFYx.srgnd.cn
http://3gc2kaql.srgnd.cn
http://O9qtgCx7.srgnd.cn
http://jdXxfB0J.srgnd.cn
http://TlLhc4YM.srgnd.cn
http://3ZMr25Xt.srgnd.cn
http://KtAbbOWI.srgnd.cn
http://lTAxOZkX.srgnd.cn
http://i3EGbbAp.srgnd.cn
http://hS8WD4yJ.srgnd.cn
http://6aaA9APY.srgnd.cn
http://www.dtcms.com/a/378256.html

相关文章:

  • 【npm】npm 包更新工具 npm-check-updates (ncu)
  • pnpm相对于npm,yarn的优势
  • vue3源码学习(四)watch 源码学习
  • 利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
  • 短剧小程序系统开发:打造个性化娱乐新平台
  • 从MySQL到StarRocks:全量与增量同步的最佳实践
  • 第七篇:识破“共因失效”——如何阻止汽车系统的“团灭”危机
  • SSL部署完成,https显示连接不安全如何处理?
  • Java 与 AI 生态:深度学习框架的支持现状
  • Linux iptables 实战:配置 NAT 端口转发访问内网 MySQL
  • docker,自定义镜像dockerfile
  • 分布式专题——9 Redis7底层数据结构解析
  • WPF 数据绑定模式详解(TwoWay、OneWay、OneTime、OneWayToSource、Default)
  • 前端埋点系统架构设计与优化实践
  • SEO新手入门:什么是SEO及其作用
  • Nginx性能优化与防盗链实战指南
  • C++类(上)默认构造和运算符重载
  • 字符串大数相加:从初稿到优化的思路演进
  • 追根索源-神经网络的灾难性遗忘原因
  • 零碎的嵌入式笔记2
  • 室内配线工程量计算-批量测量更方便
  • 深入理解 Gateway 网关:原理、源码解析与最佳实践
  • 3.List,set 与 Zset(Redis数据类型)
  • 前沿探索:RISC-V 架构 MCU 在航天级辐射环境下的可靠性测试
  • 苹果上架App软件全流程指南:iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核技巧详解
  • NW622NW623美光固态闪存NW624NW635
  • 38.自编码器:AI的压缩与重建艺术
  • leetcode-python-2418按身高排序
  • 【学习日记】
  • 【Android View】事件分发机制