私は、実行時間が〜5分(おそらくそれ以上)の計算的に集中した最適化を持つGrailsアプリケーションを持っています。現在、メインのリクエストスレッドでこれらの処理を行っています。つまり、リクエストが返されるまでに5分かかります。それはうまくいきますが、使いやすさの観点からは恐ろしいです。Grailsアプリケーションで長期実行ジョブのキューを構築する最も良い方法は何ですか?
これを非同期の方法で実装する最良の方法は何ですか?私はThreadPoolExecutorが関与しなければならないと仮定しますが、どうやって起動してアクセスするのですか? Grailsサービスとしてモデル化できますか?または仕事(それらは繰り返し仕事のためだけに意味があるようです)?
また、ジョブステータスを処理するにはどうすればよいですか。 DBの新しいクラスやフラグを使用していますか?ブラウザにスピナーが表示され、状態が変わるまでポーリングを続けますか?
単にThreadPoolExecutorを使用するのに比べて、どんな利点がありますか?それよりもはるかに複雑に聞こえる。 –
それは間違いなくより複雑です。主なメリットは、あなたの質問がいくつかの要件を暗示している監視機能とポーリング機能の一部にあります。このような種類のものはJMSの世界では解決されていますが、その周りにはより多くのセットアップ/メンテナンスがあります。 本当に "enterprisey"の要件に依存します。モニタリングについて気にしない場合や、処理中にコンテナがダウンした場合に何が起きるのかを簡単に確認してください。ただ1つの可能性のあるオプション。 –
ああ、そうです。私が必要とする唯一の監視は、特定の仕事が完了するのを待っているユーザーのためです。私はトランザクションの安全性の必要もないので、より簡単なアプローチをとるつもりです。 –