Django Celery与Apache ActiveMQ的集成指南

2023-04-11 00:00:00 celery 集成 指南

Django Celery是一个支持分布式任务调度的框架,而Apache ActiveMQ是一个流行的开源消息队列系统。两者的结合可以实现更加高效的任务调度和数据传输。

下面是Django Celery与Apache ActiveMQ的集成指南,详细介绍了如何将两者结合起来使用。

一、安装和配置Django Celery

1.1 安装Django Celery

在Django项目的虚拟环境下运行以下命令进行安装:

pip install celery

1.2 配置Django Celery

在Django项目的settings.py文件中添加以下配置:

# Broker settings
BROKER_URL = 'amqp://guest:guest@localhost:5672/'

# Celery settings
CELERY_RESULT_BACKEND = "amqp"
CELERY_TASK_SERIALIZER = "json"
CELERY_RESULT_SERIALIZER = "json"
CELERY_ACCEPT_CONTENT = ["json"]
CELERY_TIMEZONE = 'Asia/Shanghai'

# Specify the name of the tasks module
CELERY_IMPORTS = ("yourapp.tasks", )

上述配置中,BROKER_URL是消息队列系统的连接地址,这里使用的是默认的RabbitMQ。

CELERY_RESULT_BACKEND是结果存储的方式,在这里使用的是AMQP,即将结果存储在消息队列系统中。

CELERY_TASK_SERIALIZER、CELERY_RESULT_SERIALIZER和CELERY_ACCEPT_CONTENT都是序列化和反序列化的格式,这里使用的是JSON。

CELERY_TIMEZONE指定时区,这里设置为中国的上海。

CELERY_IMPORTS是指定Django Celery的任务模块。

二、安装和配置Apache ActiveMQ

2.1 安装Apache ActiveMQ

从官网下载ActiveMQ的安装包,解压后执行以下命令启动ActiveMQ服务器:

./bin/activemq start

默认的访问地址为http://localhost:8161/admin,可以通过这个地址进入ActiveMQ的管理界面。

2.2 配置ActiveMQ

在ActiveMQ的管理界面中,创建一个新的队列。点击“Queues”标签页,在“Add new Queue”中输入队列的名称,例如“pidancode.queue”,点击“Create”即可创建一个新的队列。

三、编写Django Celery的任务

在Django项目的一个app中创建tasks.py文件,编写一个简单的例子任务:

from celery import task

@task
def add(a, b):
    return a + b

这个任务可以接收两个整数a和b作为参数,并返回它们的和。接下来我们将这个任务发送到ActiveMQ的队列中。

四、将任务发送到ActiveMQ队列中

4.1 安装和配置Stomp.py

Stomp.py是一个Python客户端库,用于与Stomp协议兼容的消息队列系统进行通信。在这里,我们可以使用Stomp.py来将任务发送到ActiveMQ的队列中。

在Django项目的虚拟环境下运行以下命令进行安装:

pip install stomp.py

4.2 编写发送任务的代码

在Django项目的views.py或其他需要发送任务的地方编写以下代码:

import stomp

def send_task():
    conn = stomp.Connection()
    conn.start()
    conn.connect()

    task = {
        "task": "yourapp.tasks.add",
        "args": [1, 2]
    }
    body = json.dumps(task)

    conn.send(body=body, destination="/queue/pidancode.queue")

    conn.disconnect()

这个代码片段创建了一个Stomp连接,然后创建了一个task对象,其中包括需要执行的任务和它的参数。任务是“yourapp.tasks.add”,它接收两个参数1和2。

然后将这个任务序列化成JSON,发送到名为“/queue/pidancode.queue”的队列中。

五、运行Django Celery Worker和Beat

5.1 启动Django Celery Worker

在Django项目根目录下运行以下命令,启动Celery Worker:

celery -A yourproject worker --loglevel=info

这个命令会启动一个Celery Worker,用于接收任务并执行。

5.2 启动Django Celery Beat

如果你的任务是定时执行的,那么需要启动Celery Beat,它会根据指定的时间间隔调度任务。

在Django项目根目录下运行以下命令,启动Celery Beat:

celery -A yourproject beat --loglevel=info

以上就是Django Celery与Apache ActiveMQ的集成指南,通过Stomp.py将任务发送到ActiveMQ队列中,然后使用Celery Worker和Beat执行任务。

相关文章