イベントを順番に一定間隔を空けて実行させる方法・仕組み

th7
Tera Expert

ある特定のイベントがほぼ同時に呼び出されることがあるが、同時に実行されると問題がある為、

実行が重ならないよう、一定間隔を空けて実行させるようなServiceNowの仕組みはありますか?

仕組みが標準でなければ、いい方法・アイデアを教えてください。

5件の返信5

Hitoshi Ozawa
Giga Sage
Giga Sage

th7
Tera Expert

返信ありがとうございました。

t_sadahisa
Giga Guru

ScheduleJobと同じE-learningで扱われていますが、EventとScript Actionを利用されるのはいかがでしょうか。

https://docs.servicenow.com/bundle/sandiego-platform-administration/page/administer/platform-events/reference/r_ScriptActions.html

Eventには時刻を設定することができます。
なので、あるスクリプトが動いた際に、同時に処理をしてはいけないScriptが処理中の場合に、1分延期すると言ったことが可能になります。
※依存関係のあるスクリプトの実行状態管理が必要です。

優先すべき処理をScheduledJobで定義しておき、そのJobが動いていないときに動かしたいScriptをScript Actionで定義するというのも可能かなと思います。

 

ご質問に答えられていますでしょうか。何かお力に慣れれば幸いです。

th7
Tera Expert

レスありがとうございます。

・実現したいことは、例えば、Eventがほぼ同時に3個発生する場合、そのEventのScript Actionが約10秒ごとに順番に1つずつ実行されることです。(1個目のEventのScript Actionが実行開始、約10秒後に2個目のEventのScript Actionが実行開始、その約10秒後にEventのScript Actionが実行開始 というようなイメージです)

 

・Learningの下記記事で、Custom Queues を使って1つずつ順番に実行されるようにしました。

https://developer.servicenow.com/dev.do#!/learn/learning-plans/sandiego/servicenow_application_developer/app_store_learnv2_automatingapps_sandiego_using_custom_queues_advanced_topic

また、Schedule Item の Trigger typeに 「Interval」または「Repeat」を指定、時間に10秒を指定、そうすることによって、Schedule Item自体は一定間隔の10秒を空けて起動できるようにはできましたが、Schedule Itemと関連づけたEventのScript Actionについては、1つのScript Actionが実行完了すれば、すぐさま次のScript Actionの実行に移ってしまうため、10秒間に複数のScript Actionが実行されてしまいます。

 

・ひとまずは、一定時間間隔を取る方法として、EventのScript Action に gs.sleep(10000) を指定し、実行開始時刻を一定時間間隔を取れるようにしました。

・Schedule Itemの1回の起動につき、未実行のScript Actionが多数あっても、1つだけScript Actionできるようにしたいです。