メインコンテンツまでスキップ

Extend Task Scheduler

Last updated on July 15, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

Extend Task Schedulerを使用すると、Extendアプリ内でカスタムロジックを持つタスクを定義し、スケジュールされた時刻に実行できます。cronに既に慣れている場合は、Extend Task Schedulerでのタスク実行のスケジューリングも簡単に理解できるでしょう。

important

Extend Task Schedulerは、Extend Service Extensionアプリでのみ利用できます。

Extend Service Extensionアプリにカスタムロジックを含むタスクを作成する

  1. Extendアプリのプロジェクトで、pkg/proto/generic/task_scheduler/v1フォルダを作成し、task_scheduler.protoをそこに配置します。

  2. make protoを実行して、task_scheduler.protoからコンシューマークライアントコードを生成します。

  3. OnJobTriggeredハンドラーにカスタムロジックを実装します。

    package service

    import (
    "io"

    "github.com/sirupsen/logrus"
    "google.golang.org/grpc"

    ts "extend-custom-task-service/pkg/pb/generic/task_scheduler/v1"
    )

    type TaskSchedulerServiceImpl struct {
    ts.UnimplementedTaskSchedulerServiceServer
    myService *MyServiceServerImpl
    }

    func NewTaskSchedulerService(myService *MyServiceServerImpl) *TaskSchedulerServiceImpl {
    return &TaskSchedulerServiceImpl{
    myService: myService,
    }
    }

    func (s *TaskSchedulerServiceImpl) OnJobTriggered(
    stream grpc.BidiStreamingServer[ts.ExecutionContext, ts.Response],
    ) error {
    for {
    // Receive ExecutionContext from the stream
    execCtx, err := stream.Recv()
    if err == io.EOF {
    // Client closed the stream
    return nil
    }
    if err != nil {
    logrus.Errorf("Error receiving ExecutionContext: %v", err)
    return err
    }

    // Handle different message types
    switch execCtx.MessageType {
    case ts.MessageType_TASK_START:
    // Increment task execution count when a task starts
    s.myService.IncrementTaskExecutionCount()
    logrus.Infof("Task started with cron expression: %s", execCtx.CronExpression)
    case ts.MessageType_HEART_BEAT:
    // Handle heartbeat - just log it
    logrus.Infof("Received heartbeat with cron expression: %s", execCtx.CronExpression)
    default:
    logrus.Warnf("Unknown message type: %v", execCtx.MessageType)
    }

    // Send a response back
    response := &ts.Response{}
    if err := stream.Send(response); err != nil {
    logrus.Errorf("Error sending response: %v", err)
    return err
    }
    }
    }
  4. ハンドラーを登録します。

    taskSchedulerService := service.NewTaskSchedulerService(myServiceServer)
    ts.RegisterTaskSchedulerServiceServer(s, taskSchedulerService)

タスクの実行スケジュールを設定する

  1. Extend Service ExtensionアプリのApp DetailsページでTask Schedulerタブに移動し、Create Taskボタンをクリックします。

    タスクがまだないタスクスケジューラータブ

  2. タスク名、cronスケジュール、およびタスクの開始日と終了日を入力します。タスクは、この日付範囲内である限り、指定されたcronスケジュールに従って実行されます。

    タスク作成モーダル

  3. 複数のタスクを作成したり、既存のタスクを一時的に無効化または削除したりすることができます。

    タスクがあるタスクスケジューラータブ

important

Task Schedulerのタスクを含むExtend Service Extensionアプリが実行中であることを確認してください。実行されていない場合、警告が表示され、スケジュールされたタスクが実行されない可能性があります。

タスクスケジューラーの警告

タスクの実行履歴を確認する

  1. Extend Service ExtensionアプリのApp DetailsページでTask Schedulerタブに移動し、確認したいタスクの名前をクリックします。

    タスクがあるタスクスケジューラータブ

  2. タスクの実行履歴、ステータス、所要時間、および関連するログを確認できます。また、Run Task Nowボタンをクリックしていつでもタスクを手動で実行したり、Edit Taskボタンをクリックして設定を更新したりできます。

    タスクがあるタスクスケジューラータブ

サンプル

以下のサンプルExtend Service Extensionアプリには、Extend Task Schedulerによってトリガーできるカスタムロジックを持つタスクが含まれています。

git clone https://github.com/AccelByte/extend-service-extension-with-task-scheduler-go.git