Documentation index for AI agents

GS2-JobQueue トランザクションアクション

検証/消費/入手の各トランザクションアクションの仕様

アクションの組み合わせと同時実行

すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-JobQueue 固有の内容です。

GS2-JobQueue のトランザクションアクションは、ネームスペースとユーザーの組で決まる 1 人のユーザーのジョブキューを対象にします。登録は常に新しいジョブを作るので登録ごとに別の対象になり、削除はジョブ名で特定される既存のジョブ 1 つを対象にします。

操作同じ行を重ねたとき入れ子越し別の対象になる境界
ジョブの登録
PushByUserId
1 件の登録に統合され、ジョブのリストが連結される。合計が 10 件を超えると発行時にエラーになる衝突しない。登録するたびに自分のジョブを作る登録のたびに別の対象
ジョブの削除
DeleteJobByUserId
1 件に統合される失敗するネームスペース・ユーザー・ジョブ名

トランザクションで登録したジョブは、そのトランザクションの他のアクションからはまだ存在していないものとして扱われます。すべてのアクションがトランザクション開始時点の状態を基準に動くためです。ジョブを積んでから操作したい場合は、トランザクションを分けてください。

複数のジョブをまとめて積みたい場合は、アクションを何度も指定するより、1 つの登録の jobs に並べて指定するほうが簡潔で処理も軽くなります。

ジョブはトランザクションの中ではなく、後で実行されます

積まれたジョブはトランザクションの一部としては実行されません。あとから取り出されて単独で実行され、その内容はこのトランザクションではなく、ジョブが触るサービスそれぞれの制限を受けます。

これが GS2-JobQueue を他サービスの制限の回避に使える理由です。同じものを更新するために 1 つのトランザクションに入れられない 2 つのアクションがある場合、片方をジョブとして積めば別々のトランザクションに分けられます。引き換えに、その結果はトランザクションの応答時点では反映されておらず、トランザクション全体と一括で成功・失敗することもなくなります。

同じ考え方は、アクションとして明示するのではなく設定としても使えます。ネームスペースのトランザクション設定で acquireActionUseJobQueue を有効にすると、そのネームスペースのトランザクションで入手アクションが 2 つ以上あるときに、それらが GS2-JobQueue 経由で 1 つずつ実行されるようになります。

入れ子になったトランザクションに注意

内側から削除されたジョブと、外側から削除された同じジョブが衝突します。登録は影響を受けません。登録するたびに自分のジョブを作るためです。

制限を回避したい場合

ジョブの登録は入手アクション、ジョブの削除は消費アクションです。削除どうしの衝突は消費アクションどうしなので acquireActionUseJobQueue では分離できず、enableAtomicCommit を無効にする必要があります。登録の連結が上限を超えて発行時にエラーになる場合は、どちらの設定でも解消しません。登録を分けてください。

同時実行とリトライ

ジョブの登録は、リクエストが何本重なってもコンフリクトしません。登録するたびに自分のジョブを作るためです。

ジョブの削除は、そのジョブがまだ存在することを確認します。そのため同じジョブを同時に削除すると、後から確定した側がエラーになります。削除の最中にジョブが実行を終えて取り除かれた場合も同様です。


Consume Action

消費アクション

Gs2JobQueue:DeleteJobByUserId

ユーザーIDを指定してジョブを削除

指定ユーザーのジョブキューから特定のジョブを削除します。
実行状態に関係なくジョブが削除されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
jobNamestring
UUID~ 36文字ジョブの名前
ジョブの一意な名前を保持します。
名前は UUID(Universally Unique Identifier)フォーマットで自動的に生成され、各ジョブを識別するために使用されます。
timeOffsetTokenstring~ 1024文字タイムオフセットトークン
{
    "action": "Gs2JobQueue:DeleteJobByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "jobName": "[string]ジョブの名前",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2JobQueue:DeleteJobByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  jobName: "[string]ジョブの名前"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("jobQueue").consume.delete_job_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    jobName="[string]ジョブの名前",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Acquire Action

入手アクション

Gs2JobQueue:PushByUserId

ユーザーIDを指定してジョブを登録

ユーザーのジョブキューに1つ以上のジョブを登録します(最大10件)。
各ジョブには実行する GS2-Script、引数、最大リトライ回数を指定します。
ネームスペースで enableAutoRun が有効な場合、ジョブは登録後に即座に非同期で実行され、レスポンスの autoRun フラグが true になります。
enableAutoRun が無効な場合、ジョブはキューに追加され Run API で手動実行する必要があり、autoRun フラグは false になります。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
jobsList<JobEntry>0 ~ 10 items追加するジョブの一覧
timeOffsetTokenstring~ 1024文字タイムオフセットトークン
{
    "action": "Gs2JobQueue:PushByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "jobs": [
            {
                "scriptId": "[string]スクリプトGRN",
                "args": "[string]引数",
                "maxTryCount": "[int]最大試行回数"
            }
        ],
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2JobQueue:PushByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  jobs: 
    - scriptId: "[string]スクリプトGRN"
      args: "[string]引数"
      maxTryCount: "[int]最大試行回数"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("jobQueue").acquire.push_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    jobs={
        {
            scriptId="[string]スクリプトGRN",
            args="[string]引数",
            maxTryCount="[int]最大試行回数"
        }
    },
    timeOffsetToken="[string]タイムオフセットトークン",
})