ユーザーがアップロードしたファイルを受け取り、特定の方法で処理するシステムがあります。ここで質問したいのはタイミングだけです。アップロードが完了した直後にファイルを処理するにはどうすればよいですか?
過去にキューイング システムを使用したことがあります。たとえば、beanstalkd です。ワーク キューがこのソリューションの一部であるべきだと確信していますが、通知の部分で行き詰っています。問題は、アップロード自体が処理に接続されていないことです。アップロードは SFTP サービスによって処理されます。処理は一連の perl スクリプトによって処理されます。
アップロードが完了したことをジョブ キューに通知するにはどうすればよいですか?
私は次のアイデアを検討しましたが、それらはすべてハック的、壊れやすい、または何らかの形で受け入れられないように見えます。
- どういうわけかチェックサムをジョブ キューに送信して、ファイルが完了したことを認識させます。ただし、これを行うことは、アップロードがとにかく行われたこともおそらく知っているので、これを行う良い方法は思いつきませんでした。キューに直接警告する必要があります。
- アップロードされたファイルは、チェックサムを名前として使用していることを確認してください。実際のアップロードを行うユーザーを扱っているため、これは機能しません。
- アップロード後にユーザーに 2 番目のファイル「完了」を送信してもらい、そのファイルをポーリングします。繰り返しますが、ユーザーにとっては複雑すぎます。
- ファイルの成長に注意してください。ファイルの成長が長期間停止した場合は、ファイルが完成したと考えてください。ただし、これは信頼できません。
それが重要な場合、アーキテクチャは
- Jscape SFTP サーバー
- パール
- Linux (Ubuntu 10.04) OS
編集 2012-11-06
私はもう少し調査を行い、これを見つけました:
- スタック オーバーフロー:ファイルがまだ ftp 経由で転送されているかどうかを判断する方法
この:
- 一部の Web 開発フォーラムの投稿 (古い、2004 年ごろ): http://www.velocityreviews.com/forums/t136270-determing-if-ftp-process-is-finished.html
(とりわけ、すべて似ています)。簡単に言えば、答えは「何らかの方法で、アップロードが終了したことを知らせる必要があります。完成度に関する他のすべてのテストは信頼できません」です。
私の SFTP サーバーには、「ファイルのアップロードが完了しました」などのイベントに応答して、任意のプロセスを含むアクションを開始できるトリガー システムがあることがわかりました。だから私はそれを使うつもりです。誰かがより汎用的な解決策を見つけたかどうかはまだ興味がありますが、質問への回答があると思うので、これを閉じます。