Javaや.NETの処理タスク(ドメインモデルでは「操作」と呼んでいます)の処理に適したライブラリがあります。 dbで実行する各操作を保存し、dbから未処理のタスクをフェッチして処理し、dbレコードを適切なステータス( 'processed OK'/'process error')で更新するメカニズムが必要です。Java/.NETのタスク処理ライブラリ
トリックは、操作が互いに依存することができるということです。たとえば、「オペレーション支払い」が処理されている場合、システムは「オペレーション支払いデータの確認」を実行する必要があることを発見することがあります。つまり、dbに新しいオペレーション・ローを作成し、「オペレーション支払」を実行し、次のターンに完了した後、 'Operation Payment'の処理に戻ります。
私はこれを現時点でどのように管理しているかをご説明します。
dbテーブル '操作'があります。 Cronのようなメカニズムが毎分実行され、dbから最初の100個の未処理操作をフェッチして処理します。 (処理中)現在の動作(A)を実行するために他の何らかの動作(B)が必要であると分かった場合、新しい動作(B)記録が作成され、現在の動作(A)を停止する。次の分cronは操作AとBをフェッチします。操作Aは処理されずにフェッチされますが、システムは従属操作Bがすでに作成されているとみなし、再度作成しません。オペレーションBが処理され、ステータス「処理済OK」がdbの適切な行に保存されます。次の分cronはdbから操作Aをフェッチし、依存するタスクが完了したために最後に実行できます。
私たちは、よりシンプルに、よりよく、よりエレガントにする方法を模索しています。
@michael:これはWindows Workflow Foundation(http://msdn.microsoft.com/en-us/netframework/aa663328.aspx)を使用できませんでしたか? –
私はそれをチェックアウトする必要があります。私がまだオープンソースの代替(特にjava)に興味があるとしても。 – mgamer