postgresql - Celery:使用 PostgreSQL 而不是 RabbitMQ

标签 postgresql rabbitmq celery

是否可以将不同的消息代理与 celery 一起使用?

例如:我想使用 PostgreSQL 而不是 RabbitMQ。

据我所知,它仅在结果后端受支持:http://docs.celeryproject.org/en/latest/userguide/configuration.html#database-backend-settings

从 PostgreSQL 9.5 开始,SKIP LOCKED 可以实现健壮的消息/工作队列。参见 https://blog.2ndquadrant.com/what-is-select-skip-locked-for-in-postgresql-9-5/

最佳答案

是的,您可以使用 postgres 作为代理而不是 rabbitmq。这是一个简单的例子来演示它。

from celery import Celery 


broker = 'sqla+postgresql://user:pass@host/dbname'

app = Celery(broker=broker)

@app.task
def add(x, y):
    return x + y

排队任务

In [1]: from demo import add

In [2]: add.delay(1,2)
Out[2]: <AsyncResult: 4853190f-d355-48ae-8aba-6169d38fad39>

工作结果:

[2017-12-02 08:11:08,483: INFO/MainProcess] Received task: t.add[809060c0-dc7e-4a38-9e4e-9fdb44dd6a31]  
[2017-12-02 08:11:08,496: INFO/ForkPoolWorker-1] Task t.add[809060c0-dc7e-4a38-9e4e-9fdb44dd6a31] succeeded in 0.0015781960000822437s: 3

在最新的(celery==4.1.0, kombu==4.1.0, SQLAlchemy==1.1.1) 版本上测试。

关于postgresql - Celery:使用 PostgreSQL 而不是 RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473583/

相关文章:

RabbitMQ header 与列表交换

python - celery - 如何从远程机器发送任务?

python - 使用 Amazon EC2 自动缩放 Python Celery

sql - 如何在postgresql中指定登录角色(用户)

sql - 在 SQL 中填充列

PHP无法在ubuntu中连接到postgreSQL

python - 如何在 Celery worker 中正确连接到 mongodb?

sql - 通过映射表连接 - 重复值

java - 在 RabbitMq 中插入记录时防止重复

java - 获取rabbitmq消息的body部分