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

芹菜

纪正德
2023-03-14

现在,我想将< code>register事件发布到某个特殊的交换,我可以使用celery远程检索和处理它。

实际上,我已经使用了send_task函数来实现这一点,但是它必须传递task_name来指示应该执行哪个任务并消费它。所以它似乎不太适合我的目标。

我想要的就是这样:

  1. 向某些Exchange发布注册消息;
  2. 远程机器1订阅此主题route_key并捕获消息,用于执行任务;
  3. 远程机器2-与机器1相同但执行另一个任务-接收(可能需要回复某些队列

例如,就像这个工作流一样:

注册:

>

  • send_email
  • generate_info

    ......

  • 共有1个答案

    谯志诚
    2023-03-14

    如果我需要非标准交换,我会这样做。

    在我的celeryconfig中,我像这样指定该交换并将队列分配给它(在我的情况下,我需要fan out交换):

    from kombu.common import Broadcast
    from kombu import Exchange, Queue
    CELERY_QUEUES = (
       Broadcast(name='queue_name', exchange=Exchange('queue_name', type='fanout')),
    )
    

    然后,我用celery multi生成worker,并将其分配给我的特定队列,如下所示:

    celery multi start 1 -A my_project -Q:1 queue_name -c:1 1 (other options go here)
    

    然后我可以将我的任务插入该队列,如下所示:

    from my_project import my_fancy_task
    my_fancy_task.apply_async(args=(x, y, z), queue="my_queue")
    

    我不太理解您的具体使用情况,如果您需要一台主机上的工作程序使用一个队列中的任务,然后另一台主机上的工作程序使用另一个队列中的任务,那么只需将您的任务分成两个队列,并配置每台主机来启动工作程序,然后将它们分配到对您有意义的队列中。也许这将有所帮助:用RabbitMQ交换模糊话题

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

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

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

    • 问题内容: 如何在Windows中运行celery worker而不创建Windows Service?有什么比喻吗? 问题答案: 它的完成方式与Linux中相同。将目录更改为包含celery任务的模块并调用效果很好。

    • 问题内容: 我正在尝试创建Windows服务来启动Celery。我碰到了一篇使用Task Scheduler 来做的文章。但是,它似乎启动了许多芹菜实例,并不断消耗内存直到机器死机。有什么方法可以将其作为Windows服务启动吗? 问题答案: 我从另一个网站得到了答案。Celeryd(Celery的守护程序服务)作为粘贴应用程序运行,在这里搜索“ Paster Windows Service”会导

    • 是否可以在Celery中使用不同的消息代理? 例如:我想使用PostgreSQL而不是RabbitMQ。