Celery + HaProxy + RabbitMQ丢失任务消息

时间:2015-04-28 21:32:24

标签: rabbitmq celery django-celery

可能不是最好的地方(可能是服务器故障),但我会在这里尝试:

我有django celery通过HaProxy将任务发送到RabbitMQ集群,我们时不时地丢失消息(任务未被执行)。

观察

  • 我们转过工人并监控队列大小,我们注意到我们开始了100个工作,但只有99个出现在队列中。
  • 当其他进程将RabbitMQ用于其他作业时似乎会发生

试过

  • 我尝试用带有许多连接的虚拟消息充斥RabbitMQ,并尝试将一些正确的任务放入队列中,我不能不断地复制这个问题。

只是想知道以前有没有人经历过这个?

更新

所以我深入研究代码并最终偶然发现了celery / app / amqp.py,我通过向不存在的交换添加额外的发布方法进行调试,见下文:

    log.warning(111111111)
    self.publish(
        body,
        exchange=exchange, routing_key=routing_key,
        serializer=serializer or self.serializer,
        compression=compression or self.compression,
        headers=headers,
        retry=retry, retry_policy=_rp,
        reply_to=reply_to,
        correlation_id=task_id,
        delivery_mode=delivery_mode, declare=declare,
        **kwargs
    )
    log.warning(222222222)

    self.publish(
        body,
        exchange='celery2', routing_key='celery1',
        serializer=serializer or self.serializer,
        compression=compression or self.compression,
        headers=headers,
        retry=retry, retry_policy=_rp,
        reply_to=reply_to,
        correlation_id=task_id,
        delivery_mode=delivery_mode, declare=declare,
        **kwargs
    )
    log.warning(333333333)

然后尝试从项目代码触发100个任务,然后结果只有1个消息被放入芹菜队列,我认为它是由ProducerPool或ConnectionPool引起的

0 个答案:

没有答案