スケジューラー
定義された時間間隔で関数を実行します。
スケジューラーは、関数に適用されると、UTC時間に基づいた一定の間隔でその関数を実行するようにするデコレーターの一種です。スケジューリングは通常、UTCでのcron式を使用して指定されます。
関数自体は、データベースへの問い合わせ、メールの送信、APIの呼び出しなど、あらゆる処理を実行することができます。
@scheduler
デコレーターは、cron式をパラメーターとして受け取ります。
cron式とは、Coordinated Universal Time (UTC) に基づいて関数が実行されるタイミングを定義する文字列です。表現を定義する際には、希望する時刻をUTCに変換することが重要です。
cron式は以下のように定義されます:
* * * * * *
| | | | | |
| | | | | day of week
| | | | months
| | | day of month
| | hours
| minutes
seconds (optional)
Backend SDK内の CronExpression
enum を使用してアクセス可能な、あらかじめ定義されたcron間隔もあります。
スケジューラーの作成
スケジューラーを作成するには、基本の SquidService
クラスを拡張したクラス内の関数に @scheduler
デコレーターを使用します:
import { CronExpression, SquidService, scheduler } from '@squidcloud/backend';
export class ExampleService extends SquidService {
@scheduler('sendEmailReminders', CronExpression.EVERY_MINUTE)
async sendEmailReminders(): Promise<void> {
// TODO - implement email functionality
}
}
exclusiveパラメーター
@scheduler
デコレーターは、実行する関数の名前、間隔、そして関数を排他的にするかどうかの3つのパラメーターを受け取ります。exclusiveパラメーターは boolean 型です。もしこれが true
に設定されていると、同時に一つのインスタンスのみが実行されます。もし新しいインスタンスが既存のインスタンスが実行中の間にスケジュールされると、新しいインスタンスはスキップされます。
例えば、毎分実行されるスケジューラーがあり、前のインスタンスが1分経過後もまだ実行中の場合、新しいインスタンスは実行されません。exclusive のデフォルト値は true
です。
@scheduler('sendEmailReminders', CronExpression.EVERY_MINUTE, true)
false
に設定すると、前のインスタンスが完了しているかに関わらず、スケジューラーのインスタンスが実行されるため、複数のインスタンスが同時に実行される可能性があります。
スケジューラーの無効化
スケジューラーは無効化および有効化することができます。無効化されたスケジューラーは、再び有効化されるまで実行されません。無効化されたスケジューラーは再デプロイ後も無効状態を維持しますが、undeploy後のデプロイではすべてのスケジューラーが有効化されます。
await this.squid.schedulers.disable('schedulerId');
// Re-enable the scheduler at a later time
await this.squid.schedulers.enable('schedulerId');
list メソッドを使用して、すべてのスケジューラーとその現在の状態 (enabled/disabled) を確認することもできます。
await this.squid.schedulers.list();
サービスのエクスポート
Squid が同じサービス内のスケジューラーおよびその他の関数を検出できるようにするには、service/index.ts
ファイルでサービスがエクスポートされていることを確認してください:
export * from './example-service';