【问题标题】:RabbitMQ and Celery: subscribe to job done eventRabbitMQ 和 Celery:订阅 job done 事件
【发布时间】:2021-12-30 14:54:30
【问题描述】:

我有一个简单的 Celery task.py 运行着 RabbitMQ 消息代理和 Redis 数据存储

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//', backend="redis://localhost:6379/0")

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

还有一个listener.py服务,功能很简单

def on_add(result):
    # Do something with the result.

我想以即发即弃的方式调用add(),并让另一个实现on_add() 的服务处理结果。

这是工作流程的示意图:

如何在 Celery 的后端 Redis 上创建订阅任务完成事件的侦听器?

【问题讨论】:

    标签: python redis rabbitmq celery


    【解决方案1】:

    您至少有两个选择:

    1. 使用信号 - 例如task-postrun
    @task_postrun.connect
    def task_postrun_handler(task_id, task, args, retval, **kwargs):
        if task.name == "add":
            on_add(retval)
    

    请注意,它将在同一个 celery worker 中运行。

    1. 如果你需要在单独的过程中,你可以采取花的方法和listen to the broker's events(更复杂)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多