こんにちはCI事業部の川瀬です。
前回の記事からだいぶ経ってしまいましたが、フォルダ監視のアプリケーションの冗長化について続きをやっていきたいと思います。
結論から言うと、前回お話した通りこのようなポーリング系のアプリは冗長化しないで済むならしないことです。自動再起動に任せられるならこちらに任せてしまいましょう。 とは言え、何らかの理由で冗長化しなければならない場合もあると思います。
その場合は、スケジューラとObject Storeを使います。Object Storeにフラグを設定し、そのTTLはスケジューラの間隔より長くします。
次にOn New or Update Fileを使用したフローを作成します。このフローの中では、Object Storeの有無を判別し、存在しない、つまりTTLの時間が経過しObject Storeが存在しない場合には、後段の処理を実行します。 ご存じの通り、スケジューラは冗長化しても1つのWorkerでしか動作しません。このWorkerが起動しなくなった場合、別のWokerでOn New or Update Fileをトリガーに処理が継続されることになります。
ここで注意しなければならないことは、Workerがダウンし自動再起動が実行されるまでの間は、もう1方のWokerではスケジューラは動作しないことです。
もう1つ、別のやり方としては冗長化構成しているアプリでMQ(VM or Anypoint MQ)を使用するやり方です。ただし、別のアプリからこのMQに対し、定期的にキューを送信する必要があり、この別アプリがダウンしてしまう場合もあります。結局この部分に対しては、自動再起動で対応するしかありません。
以上、フォルダ監視のアプリケーションの冗長化について記載してみました。このような複雑な処理をするぐらいなら、自動再起動だけで対応することも検討してもよいと思います。