在Django连续运行芹菜任务

在Django连续运行芹菜任务,django,apache-kafka,celery,celeryd,Django,Apache Kafka,Celery,Celeryd,我有一个Django应用程序,它应该不断地监听来自卡夫卡的消息,然后通过WebSocket发送给客户端。问题是如何设置常量侦听器。为了将来的可扩展性,我们决定在项目中引入芹菜,以通过扩展来管理这些问题 我的任务实际上是: class ConsumerTask(Task): name = 'consume_messages' def run(self, *args, **kwargs): consumer = get_kafka_consumer(settings

我有一个Django应用程序,它应该不断地监听来自卡夫卡的消息,然后通过WebSocket发送给客户端。问题是如何设置常量侦听器。为了将来的可扩展性,我们决定在项目中引入芹菜,以通过扩展来管理这些问题

我的任务实际上是:

class ConsumerTask(Task):
    name = 'consume_messages'

    def run(self, *args, **kwargs):
        consumer = get_kafka_consumer(settings.KAFKA_URL,
                                      settings.FAULT_MESSAGES_KAFKA_TOPIC,
                                      'consumer_messages_group')
        logger.info("Kafka's consumer has been started")

        while True:
            messages = consumer.poll()
            for _, messages in messages.items():
                messages, messages_count = self.get_message(messages)
                if messages_count > 0:
                    messages = save_to_db()
                    send_via_websocket_messages(messages)
它通过WS正确地保存和发送消息,但问题来自任务中的无限循环。 由于某种原因(可能是任务超时限制),如果队列中出现任务,任务将弹出,并且不再运行。 我不确定将芹菜工人妖魔化是否能解决这个问题。
您现在可以提供一些策略来组织此过程的“持续运行部分”吗?

您的用例并不适合芹菜任务。芹菜任务不应该是长时间运行的进程。您需要将任务放入代理队列,这在您的设置中也没有意义

把你的while-True循环想象成一个芹菜工人。工人应该持续运行,这也是处理更多任务时需要扩展的流程

编写一个使用while-True循环的函数,并使用将用于缩放芹菜工人以运行该managemement命令的多个实例的那种缩放

使用流程管理工具来扩展流程,如或