4

beanstalkd標準を使用してサービスとして実行します/etc/default/beanstalkd

NOT_FOUNDジョブを削除しようとすると、TTR を超えたためにジョブが解放されたため、コードでエラーがスローされることがあります。チューブに挿入されるすべてのジョブの TTR を増やしたいと考えています。

beanstalkdジョブのデフォルトの TTR を設定する方法はありますか? 私の推測では、/etc/default/beanstalkd のどこかでこれを変更できると思いますが、beanstalkdドキュメントでこれを見つけることができませんでした。

4

2 に答える 2

5

プロトコルを適切に実装していないように思えます。を処理する必要があり、実行する必要がDEADLINE_SOONありますTOUCH

DEADLINE_SOON とはどういう意味ですか?

DEADLINE_SOON締め切りが迫っているジョブを予約していることを示す reserve コマンドへの応答です (現在の安全マージンは約 1 秒です)。

保留中のエラーが頻繁に発生する場合はDEADLINE_SOON、通常、ジョブを時間内に完了していないことを示しているため、ジョブの TTR を増やすことを検討する必要があります。また、完了したタスクを削除できていない可能性もあります。

詳細については、メーリング リストのディスカッションを参照してください。

TTR はどのように機能しますか?

TTR予約された時点のジョブにのみ適用されます。そのイベントで、タイマー (ジョブ統計では「残り時間」と呼ばれる) がジョブの からカウントダウンを開始しますTTR

  • タイマーがゼロになると、ジョブは準備完了キューに戻されます。
  • タイマーが切れる前にジョブが埋められたり、削除されたり、解放されたりすると、タイマーは存在しなくなります。
  • タイマーがゼロになる前にジョブが処理された場合、タイマーは TTR からカウントダウンを開始します。

「タッチ」コマンド

作業者がジョブで作業するためにより多くの時間を要求できるようにします。これは、時間がかかる可能性のあるジョブに役立ちますがTTR、応答しないワーカーからジョブを引き離す利点も必要です。ワーカーは定期的にサーバーに対して、自分がまだ生きていてジョブを処理していることを伝えることがあります (たとえば、 でこれを行う場合がありますDEADLINE_SOON)。TTRこのコマンドは、コマンドが発行されてから数秒後に予約ジョブの自動解放を延期します。

于 2014-09-12T13:24:10.467 に答える
4

/etc/default/beanstalkd などでグローバルなデフォルトを設定する方法はありませんが、すべてのジョブが通過してキューに挿入されるラッパー関数/クラスをセットアップするのは簡単です。特に設定されていない場合は、TTR (PUT コマンドへのパラメーター) を設定します。

Beanstalkc では、put関数をオーバーライド/置換します。

def put(self, body, priority=DEFAULT_PRIORITY, delay=0, ttr=DEFAULT_TTR):
于 2014-09-11T16:29:45.543 に答える