You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Celery发送至RabbitMQ vv队列的任务消息丢失问题咨询

可能原因及排查方案

  • 实际发送任务数少于预期
    你提到的3047次如果是按任务触发次数估算的数值,大概率是发送环节提前终止导致。你提供的代码中循环调用send_task时没有做异常捕获,一旦执行过程中出现broker连接中断、网络抖动等问题,整个document_monitoring任务会直接报错退出,剩余未发送的任务就不会执行,导致实际发往队列的消息数低于估算值。
    建议在send_task逻辑处增加调用日志记录,统计实际执行的调用次数,和队列消息数做比对:如果日志统计的调用次数和队列消息数一致,即可确认是发送环节提前终止导致的数量差。

  • Celery默认无消息发送确认导致丢消息
    Celery默认没有开启生产者发布确认机制,消息发送后不会等待RabbitMQ的落盘确认,网络波动、Broker瞬时压力过大都可能导致消息在传输过程中丢失,Celery侧不会感知到这类丢失。
    可在celeryconfig中添加以下配置开启确认和发送重试,避免这类静默丢包:

# 开启任务发送失败重试
task_publish_retry = True
# 最大重试次数可自行调整
task_publish_retry_policy = {'max_retries': 3}
# 开启RabbitMQ生产者确认,发送后等待Broker返回确认信号
broker_transport_options = {'confirm_publish': True}
  • RabbitMQ队列配置导致消息被丢弃
    检查vv队列的配置,是否设置了队列长度限制、消息过期时间或死信规则:
    执行命令rabbitmqctl list_queues name arguments messages_ready查看队列参数:

    • 如果存在x-max-length参数,说明队列设置了最大长度,超过长度的消息会被自动丢弃或转入死信队列
    • 如果存在x-message-ttl参数,消息过期后会被自动清理
    • 如果绑定了死信交换机,不符合路由规则、过期、被拒绝的消息都会转入死信队列,不会出现在vv队列的统计中
  • 排除rabbitmqadmin展示bug
    可通过多个命令交叉验证消息数,确认是否为展示问题:

  1. 执行rabbitmqctl list_queues name messages_ready messages_unacknowledged查看队列就绪消息数
  2. 登录RabbitMQ管理后台,直接查看vv队列的消息统计
    多个渠道统计结果一致即可排除展示bug的可能。

内容的提问来源于stack exchange,提问作者César R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 01:24:03