如何防止亚马逊ELB坐在RabbitMQ前面与芹菜紧密相连


  1. ELB将在空闲60秒时自动关闭连接,TCP连接切换到close_WAIT状态
  2. 但是,芹菜并没有引起注意并保持发布任务消息
  3. 消息将保留在发送缓冲区中
  4. 当缓冲区已满时,芹菜发布调用将被阻止

可能的损坏:

  • 发送缓冲区中的消息将丢失
  • 阻塞发布调用将对单线程ioloop框架非常有害。例如龙卷风

解决方案

  • BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}使celery为每个发布的消息等待ack,如果ack没有接收到,它将重新建立连接并再次发送。仅适用于py amqp(ref),性能降级
  • Celery RabbitMQ心跳以保持连接处于活动状态,并避免ELB的自动关闭连接。添加额外的网络开销,在糟糕的网络环境中,心跳可能无法传递到两端,并导致此解决方案无法工作

相关内容

  • 没有找到相关文章

最新更新