当前位置: 首页 > 知识库问答 >
问题:

芹菜:使用PostgreSQL而不是RabbitMQ

孔礼骞
2023-03-14

是否可以在Celery中使用不同的消息代理?

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

共有1个答案

蒲寂离
2023-03-14

是的,您可以使用postgres作为broker而不是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)版本上测试。

 类似资料:
  • 现在,我想将< code>register事件发布到某个特殊的交换,我可以使用celery远程检索和处理它。 实际上,我已经使用了函数来实现这一点,但是它必须传递来指示应该执行哪个任务并消费它。所以它似乎不太适合我的目标。 我想要的就是这样: 向某些发布消息; 远程机器1订阅此或并捕获消息,用于执行任务; 远程机器2-与机器1相同但执行另一个任务-接收(可能需要回复某些) 例如,就像这个工作流一样

  • 我最近开始研究分布式计算以提高计算速度。我选择了芹菜。然而,我对一些术语不太熟悉。所以,我有几个相关的问题。 来自芹菜文档: ... Celery通过消息进行通信,通常使用代理在客户机和工作人员之间进行调解。为了启动任务,客户机将消息添加到队列中,然后代理将该消息传递给工作者。 什么是客户端(这里)?什么是经纪商?为什么消息通过代理传递?为什么 Celery 会使用后端和队列进行进程间通信? 当我

  • 问题内容: 我正在尝试将类的方法用作django-celery任务,并使用@task装饰器对其进行标记。阿南德·杰亚哈(Anand Jeyahar)询问,这里也描述了同样的情况。是这样的 问题是,即使我使用这样的类实例,也需要至少两个参数,这意味着指针未命中。 更多信息: 由于继承,我无法将类转换为 模块 方法在很大程度上依赖于类成员,所以我不能使它们成为 静态的 标记 类 与@task装饰任务,

  • 我最近一直在用芹菜,我不喜欢它。它的配置是混乱的,过于复杂的,并且没有很好的文档记录。 我想从一个生产者向多个消费者发送带有芹菜的广播消息。使我困惑的是芹菜术语和底层传输rabbitMQ的术语之间的差异。 在RabbitMQ中,您可以使用单个扇出交换和多个队列来广播消息: 但在Celery中,术语都搞乱了:这里可以有一个广播队列,它向多个消费者发送消息: 我甚至不明白Celery广播队列应该如何工

  • 我已将芹菜配置为在dev box上为Flask应用程序运行异步作业,如下所示: 配置。py: 管理py: 在启动应用程序之前,我先启动redis: 然后,当我运行应用程序(run_芹菜)时,会显示以下芹菜配置: <>** ---------- . 以及以下重复出现的错误: 错误/主进程消费者:无法连接到amqp://guest:**@127.0.0.1:5672//:[Errno 111]连接拒绝

  • 问题内容: 我正在运行Django 1.8 + Celery 4.0.2 Celery配置良好,可以在Redis后端本地运行Django任务。但是,当我尝试使用设置时,此设置无效。其他设置则不是这种情况,例如 具体来说,我看到的是 lib / python2.7 / site-packages / celery / app / task.py(520)apply_async()因此,CELERY_