芹菜:使用PostgreSQL代替RabbitMQ



是否可以使用芹菜使用其他消息代理?

例如:我想使用postgresql而不是兔子。

afaik仅在结果后端支持:http://docs.celeryproject.org/en/latest/userguide/configuration.html#database-backend-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

在最新测试(芹菜== 4.1.0,kombu == 4.1.0,sqlalchemy == 1.1.1)版本。

是否可以使用芹菜使用其他消息代理?

版本4之前,可以肯定!在正式文档。

之后

因此,如果要使用PostgreSQL作为经纪人,没关系,芹菜也支持Sqlalchemy。

但是,如果您想在芹菜4.0中使用它,也许有点困难,在我看来,一种方法是更改Kombu的代码,是的,它是Kombu,不是芹菜!

相关内容

  • 没有找到相关文章

最新更新