2016-05-01 22 views
2

私は、顧客がプロセスを一時停止したり、プロセスを再開したりすることができる、私のプロジェクトの中で、プロセス1ではなく保留中であるという要件を持っています。私はウェブソケットを使用してセロリのタスク結果を表示していますが、ポーズ/レジュームではコードをどのように設計するのか分かりません。唯一の方法は私の心の中でになるのデータを保持している間にタスクを一時停止要求を取り消し、キャッシュ内でプロセスを取り消し、そのキャッシュを後で再開APIで再利用してセロリのタスクを再度開始します。このアプローチを使用すると、Webソケットを介してタスクの処理ステータスをポーリングしたため、プロセスがない場合、のtrueフラグを送信して接続を終了しました。。どのタスクが処理中か保留中かを知るために、私はタスクマッピングのために別のテーブルを追加し、最後のタスクが実行されるときにこのテーブルをフラッシュします。このデザインを完璧に建築することを手伝ってください。もし私が何かを見逃したら、私に指摘してください。セロリタスクを一時停止または再開する方法は?

答えて

0

誤ったアプローチ。現在の状態を取得するために手動でプロセスを一時停止または取り消してはいけません。一時停止と失効の状態は、ブローカエラーのために予約されています。

コードを再設計してみてください。 achiveする

主な目標は、この文で

customer can pause or resume process which are pending not the process one

ある

https://en.wikipedia.org/wiki/Workflow_patternようにあなたのコードを設計段階かの状態にあなたのコードを分割します。 1つのセロリプロセスはすべてのワークフローを通過できますが、たとえば、多くの外部プロバイダ(1つのリクエスト= 1つのステート)に対して多くのリクエストを行う場合は必要ありません。お客様が休止状態になっている場合は、セロリー・プロセスを停止してください。状態がアクティブに変わるときをチェックし、このタスクに対して新しいセロリプロセスを再び実行するイベントを追加します。

+0

ストップセロリプロセスとは、労働者が消費するストップを意味しますか? – Shashank

+0

いいえ、私はプロセスを完全に終了することを意味しました。顧客がもう一度スタートしたら、このプロセスのために新しいタスクを作成します。 – ImportError

+0

私はすべての顧客タスクを1つのキューで実行しました。したがって、顧客が一時停止または再開するたびに、顧客関連のタスクIDを取得し、trueを終了させて​​プロセスを強制終了します。これは私が理解するものです。 – Shashank

関連する問題