目前我有一个 Ec2 实例用于处理传入的 API 请求
- 用户订单通过 celery 任务进入 redis 队列
- 我有两个 Ec2 实例正在处理队列
问题在于,API 和 celery 工作节点上的代码基础相同。例如,我使用 cutsomer.process_order(order_id)
,然后工作节点完成其余操作。
有没有办法将 API 与工作节点代码分离?我想将 API 放在独立的代码库中,而将工作节点放在另一个独立的代码库中。
目前我有一个 Ec2 实例用于处理传入的 API 请求
问题在于,API 和 celery 工作节点上的代码基础相同。例如,我使用 cutsomer.process_order(order_id)
,然后工作节点完成其余操作。
有没有办法将 API 与工作节点代码分离?我想将 API 放在独立的代码库中,而将工作节点放在另一个独立的代码库中。
您的 API 代码可以调用任何 Celery 任务,而无需可用任务源代码。Celery 有一个名为签名(signatures)的功能:
from celery import Celery
app = Celery(...)
process_order = app.signature('your-other-project.tasks.process_order')
result = process_order.delay(order_id) # standard calling api works
print(result.get())
请确保您的 API 和 Worker 连接到同一个消息代理,并且您的 Worker 实际上有与签名中相同的任务名称。