首页 > 解决方案 > 如何使用 redis 作为消息代理正确设置生产者 - 消费者方案并将结果存储在 postgresql / sqlite 中?

问题描述

我对 celery-redis 方案很陌生,但我正在尝试实现一个生产者-消费者https://github.com/SkyBulk/celery方案,类似于我的任务生产者是我的 Django 任务,然后是代理(Redis)使用 celery beat 用于任务调度程序,其中 Redis 可以适合此方案来存储我的任务,并且 celery worker 执行任务生产者(django 任务)或任何其他外部 djngo 并将这些任务的结果保存到 sqlite 或 postgresql(而不是调度程序的日志) )

演示

问题。为什么我在 Redis 上一无所获?

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "orders.apps.OrdersConfig",
]

CELERY_BROKER_URL = "redis://redis:6379/0"
CELERY_RESULT_BACKEND = "redis://redis:6379/0"
CELERY_BEAT_SCHEDULE = {
    "sample_task": {
        "task": "orders.tasks.sample_task",
        'schedule': timedelta(seconds=2),
    },
    "send_email_report": {
        "task": "orders.tasks.send_email_report",
        "schedule": crontab(minute="*"),
    },
}

日志

celery_1       | [2021-04-27 21:42:01,910: INFO/MainProcess] Received task: orders.tasks.sample_task[a50a9653-c141-4922-816a-67b9423bb110]  
celery_1       | [2021-04-27 21:42:01,912: WARNING/ForkPoolWorker-3] each two seconds
celery_1       | [2021-04-27 21:42:01,913: INFO/ForkPoolWorker-3] Task orders.tasks.sample_task[a50a9653-c141-4922-816a-67b9423bb110] succeeded in 0.0017081940000025497s: None
celery_1       | [2021-04-27 21:42:03,910: INFO/MainProcess] Received task: orders.tasks.sample_task[567c8088-3de7-4876-a86f-ee418ff47ec5]  
celery_1       | [2021-04-27 21:42:03,912: WARNING/ForkPoolWorker-3] each two seconds
celery_1       | [2021-04-27 21:42:03,913: INFO/ForkPoolWorker-3] Task orders.tasks.sample_task[567c8088-3de7-4876-a86f-ee418ff47ec5] succeeded in 0.0019250379999675715s: None
celery_1       | [2021-04-27 21:42:05,908: INFO/MainProcess] Received task: orders.tasks.sample_task[407d41a7-8b09-4760-94d8-9311f0e9222e]  
celery_1       | [2021-04-27 21:42:05,909: WARNING/ForkPoolWorker-3] each two seconds
celery_1       | [2021-04-27 21:42:05,910: INFO/ForkPoolWorker-3] Task orders.tasks.sample_task[407d41a7-8b09-4760-94d8-9311f0e9222e] succeeded in 0.0009493900000165922s: None
celery_1       | [2021-04-27 21:42:07,910: INFO/MainProcess] Received task: orders.tasks.sample_task[87c00ebe-9353-46d9-9bd1-67c60280b937]  

标签: djangopostgresqlredisproducer-consumer

解决方案


推荐阅读