python - 了解 celery 工作节点

标签 python redis rabbitmq celery

我想在这里了解 celery 和 AMQP 的工作原理。

我的场景

我在我的机器上安装了celery

pip install celery

我用做任务

from celery import Celery

app = Celery('tasks', backend='amqp', broker='amqp://')

@app.task
def print_hello():
    print 'hello there'

据我了解,celery 将此任务转换为消息并通过 AMQP 协议(protocol)发送给代理(redis 或 rabbitmq)。然后将这些消息排队并传递给工作节点以处理消息。

我的问题是,

  1. 假设我在 Java 环境中创建任务,如果消息被发送到外部工作节点,是否意味着工作节点服务器必须安装 Java 才能执行任务?
  2. 如果消息被外部工作节点拾取,工作节点和代理如何找到对方?在上面的代码中,我只有代理地址来存储任务。

另外,为什么我们要将任务存储在代理中?为什么我们不能在 celery 中实现交换算法并将消息直接发送给 worker ?

SOAP 和 AMQP 有什么区别?

最佳答案

工作人员不仅需要 Python,还需要您要在其上运行的任务的所有代码。

但是您没有专门针对节点,这正是存在代理的原因。您将任务放在队列中,然后工作人员将它们接走。

我不知道您为什么要在这种情况下提到 SOAP。它与任何事情都没有任何关系。

关于python - 了解 celery 工作节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44075266/

相关文章:

python - Numpy 将图像连接成数组

Azure Web 应用程序的多个实例的 Azure Redis 超时

ASP.NET InProc 缓存与分布式缓存

ruby - 有没有办法让 resque-web 与 Redis To Go 托管的 redis 实例一起工作?

java - RabbitMQ N 交换测试

python - 用 python 计算图像径向平均值的最佳方法是什么?

python - 强制 pylint 分数 merge 到 github 分支上

python - 解析python中的数学表达式并求解以找到答案

java - 如何使用 Spring Boot 通过扇出交换在 RabbitMQ 上发布消息

error-handling - 什么属于 DLQ/无效消息队列?