6

私が見ることができることから、Gearmanはスケジュールされたジョブまたは遅延したジョブをサポートしていません。スケジュールされたジョブをat最初にキューに入れ、at期間が終了した後にギアマンキューに追加できるのではないかと考えていました。

atタスクは、サーバーのスプールディレクトリ内のディレクトリにファイルとして書き込まれるため、永続的です。atしたがって、唯一のボトルネックは、サーバー間で分散できないため、タスクをGearmanキューに追加するための単純なスクリプトである可能性があります。実際のジョブを処理するためにGearmanに渡すことは、適切なジョブログなどを取得できることを意味します。

これはこれにアプローチするための最良の方法であり、他のアイデアはありますか?

私が他のキューソリューションよりもGearmanを選んだ理由は、それがPHP拡張機能を持っているからです。

私が書いているコードは、送信する必要のある電子メールのキューを維持するために使用されます。たとえば、金曜日の9.50にexample@example.orgにメールを送信するように指定できます。

4

3 に答える 3

2

at私は私の質問で最初にレイアウトされたルートに行くことにしました。この目的のために、バイナリ用の小さなPHPラッパーを作成し、atUbuntuでテストしました。興味がある場合は、githubで見つけることができます:http://github.com/treffynnon/PHP-at-Job-Queue-Wrapper

于 2010-09-01T12:52:05.833 に答える
1

時間単位または日単位の解決でのみうまく機能するかなりハッキーな解決策は、ジョブ(関数)名に送信したい日付を含めることです。次に、これらのジョブに登録するために、1時間または1日ごとにcronで開始するワーカーを配置します。

たとえば、2012年3月12日月曜日の午前9時にメールを送信する場合は、email_2012-03-12_09:00のような名前でキューにジョブを追加します。次に、cronジョブを1時間ごとに実行します。これにより、email_ +現在の日付と時間に一致するジョブに登録するワーカーが実行されます。

私が言うように、おそらく実行可能ですが、かなりハッキーです!

更新1:最近、gearmandデータベースの永続性に関するドキュメントで、 INTであるwhen_to_runという名前のフィールドが言及されており、UNIXエポックタイムスタンプを保持できる可能性があることがわかりました。このフィールドはまだコードで参照されていないようです。

于 2011-01-25T13:33:06.200 に答える
0

Zendを使用している場合...

SlmQueueは、ジョブキューの抽象化レイヤーです。これにより、ZendFramework2アプリケーションでジョブキューシステムを簡単に使用できます。これにより、特定のタイプのジョブキューを使用するように強制されることはありません。基盤となるシステムに関係なく、コードとジョブを記述できます。これにより、システムの優れた柔軟性と分離が可能になります。

https://github.com/juriansluiman/SlmQueue

于 2014-07-23T09:47:46.590 に答える