SchedulerX の HTTP ジョブでは、スケジューリングにエージェントが必要です。サーバーレス実行モードではパブリックドメイン名が必要となり、安定性やセキュリティ上のリスクがあります。そのため、XXL-JOB HTTP ジョブの使用を推奨します。
前提条件
-
サーバーレス実行モード:クラウド関数またはサーバーレスアーキテクチャを使用して HTTP ジョブをトリガーします。このモードは、パブリック API 呼び出しや軽量タスクに適しています。
-
エージェント実行モード:ターゲットデバイスにインストールされた SchedulerX エージェントを使用して HTTP ジョブを実行します。まず SchedulerX エージェントをデプロイする必要があります。このモードは、内部サービス呼び出しや複雑な処理シナリオに適しています。
コンソールで HTTP ジョブを作成する際に、実行モード パラメーターで `serverless` または `agent` を選択できます。
実行モード
次の表は、SchedulerX の HTTP ジョブと MSE-XXLJOB の HTTP ジョブを比較したものです。
|
SchedulerX サーバーレス (非推奨) |
SchedulerX エージェント |
MSE-XXL-JOB |
|
|
クライアント必須 |
いいえ。リクエストはサーバーによって開始されます。 |
はい。サーバーがクライアントにコマンドを送信し、クライアントが呼び出しを開始します。 |
いいえ。リクエストはサーバーによって開始されます。 |
|
リクエストメソッド |
現在、GET と POST のみがサポートされています。他のメソッドはユーザーの需要に応じてサポートされる予定です。 |
||
|
リクエスト定義 |
Cookie 設定と POST パラメーターのみをサポートします。 |
ヘッダー、クエリ、ボディなど、すべての HTTP ジョブパラメーター設定をサポートします。 |
|
|
応答定義 |
|
||
|
第 2 レベルのスケジューリング |
いいえ。分レベルのスケジューリングのみをサポートします。 |
はい |
はい |
|
内部 URL のサポート |
いいえ |
はい |
|
|
ドメイン名要件 |
いいえ |
はい。ゲートウェイやドメイン名を必要とせずに Kubernetes Service アクセスをサポートします。 |
|
|
ブロードキャストシャーディングのサポート |
いいえ |
はい |
|
|
タスク名の解析 |
タスク名に中国語の文字が含まれている場合、バックエンドは `URLDecode.decode(jobName, "utf-8")` を使用してデコードできます。 |
||
HTTP ジョブの作成
GET または POST リクエストメソッドを使用して HTTP ジョブを作成できます。
ステップ 1:基本設定
GET
-
アクセス可能な HTTP サービスをデプロイします。
-
すでにアクセス可能な HTTP サービスがある場合は、ステップ 2 に進み、SchedulerX コンソールで HTTP ジョブを作成します。ターゲット HTTP サービスの URL、リクエストメソッド (GET または POST)、およびその他の関連する設定情報を準備してください。
-
HTTP サービスをまだデプロイしていない場合は、次の Java コードサンプルを参照して HTTP インターフェイスを開発してください。
@GET @Path("hi") @Produces(MediaType.APPLICATION_JSON) public RestResult hi(@QueryParam("user") String user) { TestVo vo = new TestVo(); vo.setName(user); RestResult result = new RestResult(); result.setCode(200); result.setData(vo); return result; }
-
-
SchedulerX コンソールで HTTP ジョブを作成します。
以下は、GET HTTP ジョブの関連設定です。スケジュールジョブの作成方法の詳細については、「スケジュールジョブの作成」をご参照ください。次のパラメーターを設定します:[タスク名] を
http_getに設定し、[タスクタイプ] で [Http] を選択し、[完全な URL] フィールドにターゲットリクエストアドレスを入力し、[リクエストメソッド] で [GET] を選択し、[応答解析モード] で [カスタム JSON] を選択し、[戻り値チェックキー] にcodeを入力し、[戻り値チェック値] に 200 を入力し、[実行タイムアウト] を10秒に設定し、[実行モード] で [serverless] を選択します。
POST
-
アクセス可能な HTTP サービスをデプロイします。
-
すでにアクセス可能な HTTP サービスがある場合は、ステップ 2 に進み、SchedulerX コンソールで HTTP ジョブを作成します。ターゲット HTTP サービスの URL、リクエストメソッド (GET または POST)、およびその他の関連する設定情報を準備してください。
-
HTTP サービスをまだデプロイしていない場合は、次の Java コードサンプルを参照して HTTP インターフェイスを開発してください。
import com.alibaba.schedulerx.common.constants.CommonConstants; @POST @Path("createUser") @Produces(MediaType.APPLICATION_JSON) public RestResult createUser(@FormParam("userId") String userId, @FormParam("userName") String userName) { TestVo vo = new TestVo(); System.out.println("userId=" + userId + ", userName=" + userName); vo.setName(userName); RestResult result = new RestResult(); result.setCode(200); result.setData(vo); return result; }
-
-
SchedulerX コンソールで HTTP ジョブを作成します。
以下は、POST HTTP ジョブの関連設定です。スケジュールジョブの作成方法の詳細については、「スケジュールジョブの作成」をご参照ください。[タスク名] を
http_postに設定し、[タスクタイプ] で [Http] を選択し、[完全な URL] フィールドにターゲットインターフェイスアドレスを入力し、[リクエストメソッド] で [POST] を選択し、[応答解析モード] で [カスタム JSON] を選択し、[戻り値チェックキー] にcodeを入力し、[戻り値チェック値] に 200 を入力し、[実行タイムアウト] を10秒に設定し、[ContentType] で [application/x-www-form-urlencoded] を選択し、[POST パラメーター] をkey1=value1&key2=value2のフォーマットで入力し、[実行モード] で [serverless] を選択します。
serverless および agent HTTP ジョブのパラメーター:
SchedulerX コンソールでは、serverless と agent の実行モードの設定パラメーターは同じです。
|
パラメーター |
説明 |
|
Name |
ジョブのカスタム名です。 |
|
Description |
将来の検索を容易にするための、ジョブのビジネス目的の簡単な説明です。 |
|
Application ID |
ジョブが属するグループです。ドロップダウンリストから選択できます。 |
|
Job Type |
ジョブのタイプです。このシナリオでは、HTTP を選択します。 |
|
[完全な URL] |
|
|
[リクエストメソッド] |
GET または POST を選択します。 |
|
[応答解析モード] |
応答解析モードを選択します。サポートされているモードは次のとおりです:
|
|
[応答解析モード] で [HTTP 応答コード] を選択した場合: |
|
|
[HTTP 応答コード] |
期待する HTTP 応答コードを設定します。デフォルトは 200 です。 |
|
[応答解析モード] で [カスタム JSON] を選択した場合: |
|
|
[戻り値チェックキー] |
JSON の戻り値のみをサポートします。成功した応答をチェックするためのキーです。 |
|
[戻り値チェック値] |
JSON の戻り値のみをサポートします。成功した応答をチェックするための値です。 |
|
[応答解析モード] で [カスタム文字列] を選択した場合: |
|
|
[カスタム文字列] |
カスタム文字列を設定します。 |
|
[実行タイムアウト] |
|
|
[Content type] |
[リクエストメソッド] が POST の場合、リクエストボディのデータ形式を指定します。サポートされている形式:
|
|
[POST パラメーター] |
[リクエストメソッド] が POST の場合、POST フォームのパラメーターを指定します。例:
|
|
クッキー |
例: |
|
[実行モード] |
|
|
詳細設定 |
|
|
Task Failure Retry Count |
ジョブが失敗した後にリトライする回数です。デフォルトは 0 です。 |
|
Retry Interval |
ジョブが失敗した後のリトライ間隔です。デフォルトは 30 秒です。 |
|
Task Concurrency |
同じジョブのインスタンスが同時に実行できる最大数です。値が 1 の場合、同時実行は防止されます。同時実行数の上限を超えた場合、現在のスケジュールはスキップされます。 |
|
Cleanup Policy |
ジョブ実行履歴のクリーンアップポリシー。デフォルトでは、Record Count を N として、最後の N 件のレコードを保持します。
|
|
Record Count |
ジョブのために保持する過去の実行レコードの数です。デフォルトは 300 です。 |
ステップ 2:タイミング設定
セットアップウィザードのSchedule Configuration ページで、タイミングパラメーターと詳細設定パラメーターを設定し、Next をクリックします。
タイミングパラメーターは以下の通りです:
|
パラメーター |
説明 |
|
Time Type |
|
|
Cron Expression (cron 時間タイプのみ) |
Cron 式を入力します。Cron 構文に従って直接記述するか、ツールを使用して生成および検証できます。 |
|
固定頻度 (fixed_rate 時間タイプのみ) |
秒単位で固定頻度を入力します。値は 60 秒以上である必要があります。たとえば、200 を入力すると、200 秒ごとにスケジューリングされます。 |
|
固定遅延 (second_delay 時間タイプのみ) |
秒単位で固定遅延を入力します。範囲は 1~60 秒です。たとえば、5 を入力すると、スケジュールをトリガーする前に 5 秒間遅延します。 |
|
スケジュール時間 (onetime 時間タイプのみ) |
日付と時刻を選択します。たとえば、 |
|
詳細設定 |
|
|
時間オフセット |
スケジュール時間に対するデータ時間のオフセットです。この値は、スケジューリング中にコンテキストから取得できます。 |
|
Time Zone |
ニーズに応じて、主要な国やリージョン、標準の GMT フォーマットなど、さまざまなタイムゾーンを選択できます。 |
|
Calendar |
ジョブの有効なカレンダーを設定します。
|
|
Effective Time |
ジョブの有効期間を設定します。
|
ステップ 3:通知設定
HTTP ジョブは失敗アラートをサポートしています。タイムアウトや予期しない戻り値などの問題が発生した場合、ジョブ作成時にアラートルールを設定して、対応する通知を受け取ることができます。
-
セットアップウィザードのNotification Configurationページで、アラートパラメーターと連絡先を設定し、[完了]をクリックします。
設定可能なパラメーターには、[タイムアウトアラート] (有効)、[タイムアウト期間] (秒単位)、[タイムアウト時に終了] (無効)、[成功通知] (無効)、[失敗アラート] (有効)、[連続失敗回数] (1 に設定)、[利用可能なマシンがない場合のアラート] (有効) があります。[通知チャネルと連絡先] では、[アプリケーショングループの連絡先] または [カスタム] を選択できます。
-
タスクが正常に作成されたら、[タスク管理] ページに移動し、Run Once を、対象タスクの Actions 列でクリックします。
ジョブインスタンスレコードの詳細ページで、実行結果とログを確認します。
ジョブの基本情報の取得
HTTP ジョブの基本情報はヘッダーに含まれています。この情報を取得するには、クライアントの pom.xml ファイルに次の依存関係を追加する必要があります。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-common</artifactId>
<version>1.6.0</version>
</dependency>
次の例は、GET メソッドを使用してジョブの基本情報を取得する方法を示しています。
import com.alibaba.schedulerx.common.constants.CommonConstants;
@GET
@Path("hi")
@Produces(MediaType.APPLICATION_JSON)
public RestResult hi(@QueryParam("user") String user,
@HeaderParam(CommonConstants.JOB_ID_HEADER) String jobId,
@HeaderParam(CommonConstants.JOB_NAME_HEADER) String jobName) {
TestVo vo = new TestVo();
vo.setName("armon");
// jobName に中国語の文字が含まれている場合は、URL デコードする必要があります。
String decodedJobName = URLDecoder.decode(jobName, "utf-8");
System.out.println("user=" + user + ", jobId=" + jobId + ", jobName=" + decodedJobName);
RestResult result = new RestResult();
result.setCode(200);
result.setData(vo);
return result;
}
ジョブ定数の定義
次の表は、CommonConstants の基本情報について説明しています。
|
定数 |
キー |
説明 |
|
JOB_ID_HEADER |
schedulerx-jobId |
ジョブ ID。 |
|
JOB_NAME_HEADER |
schedulerx-jobName |
ジョブ名。 |
|
SCHEDULE_TIMESTAMP_HEADER |
schedulerx-scheduleTimestamp |
スケジューリング時刻のタイムスタンプ。 |
|
DATA_TIMESTAMP_HEADER |
schedulerx-dataTimestamp |
データ時刻のタイムスタンプ。 |
|
GROUP_ID_HEADER |
schedulerx-groupId |
アプリケーション ID。 |
|
USER_HEADER |
schedulerx-user |
ユーザー名。 |
|
MAX_ATTEMPT_HEADER |
schedulerx-maxAttempt |
インスタンスの最大リトライ回数。 |
|
ATTEMPT_HEADER |
schedulerx-attempt |
インスタンスの現在のリトライ回数。 |
|
JOB_PARAMETERS_HEADER |
schedulerx-jobParameters |
ジョブパラメーター。 |
|
INSTANCE_PARAMETERS_HEADER |
schedulerx-instanceParameters |
特定のジョブインスタンスのパラメーター。API 経由でジョブをトリガーする際に渡されます。 |
結果の検証
HTTP ジョブの実行結果は、実行リストページで確認できます。成功した結果については、「GET」をご参照ください。
ジョブが失敗した場合は、[詳細] をクリックして、以下に示すように具体的な失敗原因を確認します:
-
戻り値が期待値と異なります。インスタンス詳細ページの [結果またはエラーメッセージ] フィールドに、具体的な失敗原因が表示されます。例えば、エラーメッセージ
The returned value is different from the expected valueは、返された JSON の"success":falseが期待値と一致しないため、ジョブが失敗したことを示します。 -
実行タイムアウト。HTTP ジョブの実行がタイムアウトすると、インスタンス詳細ページの [結果またはエラーメッセージ] フィールドに
java.net.SocketTimeoutException例外が表示され、ソケット接続タイムアウトを示します。