最佳实践:

1. 客户端通过使用连接池重用连接,减少建立/销毁连接的开销,提升吞吐量。

 
2. 客户端执行put命令,放置一个Job到beanstalkd服务器时,应先执行use命令,创建或选择一个tube,并设置Job的优先级(pri,0表示优先级最高,数值越大优先级越低,当需要把job放到队列前面时,给job指定一个高的优先级。)、延迟时间(delay,表示延迟多少时间再把Job放到Ready队列。)、运行时间(ttr,表示处理Job需要多长时间,必须认真反复估算)。
 

3. 客户端从beanstalkd服务器reserve一个Job,得到“DEADLINE-SOON”响应,它表示Job的TTR马上要过期。如果一段时间之内,出现大量的“DEADLINE-SOON”响应,表示大量的Job没有在指定的时间(TTR)完成。通常根据不同场景,使用不同的处理方式。

  • 当无法估算Job的TTR时,或存在大并发数据put到beanstalkd服务器时,在执行reserve命令后,立刻执行bury命令。Job处理完成后,delete它。否则,当客户端执行reserve命令时,很可能会收到大量DEADLINE-SOON响应。
  • 当可以估算Job的TTR时,增加TTR,设置put命令的TTR值为新估算的值。Job处理完成后,delete它。
  • 客户端从beanstalkd服务器reserve一个Job,然后执行Job处理逻辑,处理逻辑的过程中,客户端可以通过执行touch命令来延长指定Job的TTR。
 

4. 客户端从beanstalkd服务器reserve一个Job,然后执行Job处理逻辑,当处理过程中发生错误时,通常根据Job失败的原因,选择不同的处理方式。

  • 如果你不做任何处理(bury,realse,delete),当Job的TTR过期后,服务器会把此Job重新置入Ready队列。
  • 如果你想把由一个失败的Job交给另一种类型的worker来处理,你可以把job放到另一个tube。
  • 如果你想把一个失败的Job保存,供以后检查时用;那么,你需要执行bury命令隐藏它,然后再处理。
  • 如果你不想再处理一个失败的Job;那么,你需要执行delete命令删除它。
 

5. 如果你想控制所有worker,你可以pause这个tube一段时间。