可能不是最好的地方(可能是服务器故障),但我会在这里尝试:
我有django celery通过HaProxy将任务发送到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引起的