- ELB 将自动关闭连接 60 秒空闲,TCP 连接切换到 CLOSE_WAIT 状态
- 但是,celery 不会被注意到并保持发布任务消息
- 消息将保存在发送缓冲区中
- 当缓冲区已满时,celery 发布调用将被阻塞。
可能的损坏:
- 发送缓冲区中的消息将丢失
- 阻塞发布调用对单线程 ioloop 框架是非常有害的。例如龙卷风
可能的损坏:
解决方案
BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
让 celery 等待每个发布消息的 ack,如果 ack 没有收到,它将重新建立连接并再次发送。仅适用于 py-amqp ( ref ),性能降级。