SchedulerX 2.0支持調度HTTP任務,包含Serverless、Agent兩種執行方式,通過控制臺配置后即可使用。本文介紹如何在控制臺配置HTTP任務。
HTTP任務簡介
HTTP任務不同執行方式的區別與使用限制如下所示。
執行模式 | Serverless | Agent |
是否需要接入客戶端 | 否,請求由SchedulerX發起調用。 | 是,請求由接入的用戶端發起調用。 |
請求方式 | 目前支持GET、POST。 | |
結果解析 | HTTP請求返回結果需為JSON格式,服務端通過解析指定Key的值與設定值是否一致判斷本次請求是否成功。 | |
是否支持秒級任務 | 否,僅支持到分鐘級別。 | 是。 |
是否支持內部URL | 否,Serverless執行方式下,請求URL需要有公網權限,如果HTTP接口地址的格式為ip:port,需要機器開通公網權限。 | 是。 |
任務名解析 | 如果任務名是中文,后端可通過 |
如何創建HTTP任務
您可以通過GET和POST兩種請求方式,創建HTTP任務。
GET
使用GET請求方式需要在客戶端中添加配置,然后在控制臺中創建任務。
第一步:基本配置
在客戶端中添加配置GET方法配置。
相關配置如下所示。關于客戶端接入SchedulerX的詳細步驟,請參見Spring Boot應用接入SchedulerX。
@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; }
在控制臺創建HTTP任務。
HTTP任務GET方法的相關配置如下所示。關于創建調度任務,請參見創建調度任務。
Serverless HTTP任務參數說明:
配置項
說明
任務名
任務名稱。
描述
任務描述。簡潔地描述業務,便于后續搜索。
應用ID
選擇目標應用。
任務類型
指任務所實現的類型,當前支持Java、Shell、Python、Go、http、xxljob和DataWorks等類型,其中Shell、Python和Go會彈出編輯框,在編輯框中編寫任務腳本。本示例選擇http。
完整的URL
需要填寫完整的URL,包括
http://
。請求方式
本示例選擇GET。
應答解析模式
選擇應答解析模式。支持的模式如下:
HTTP響應碼
通過HTTP響應碼應答,您需要設置標準的HTTP請求響應返回Code值。
自定義JSON
返回校驗Key和返回校驗Value。
服務端默認HTTP請求結果為JSON格式,根據填寫的Key和Value校驗結果是否成功。
{ "code": 200, "data": "true", "message": "", "requestId": "446655068791923614103381232971", "success": true }
上方示例代碼可以校驗Key為Success,校驗value:true或者校驗Code是否為200。
自定義字符串
根據自定義的返回字符串內容是否完全匹配,判斷任務是否執行成功。
返回校驗Key
僅支持返回值JSON格式,成功返回校驗Key。
返回校驗Value
僅支持返回值JSON格式,成功返回校驗Value。
執行超時時間(秒)
serverless:基礎版最大30秒,專業版最大120秒。agent:無限制。
cookie
例如
key1=val1;key2=val2
。多個值用半角分號(;)隔開,最大長度為300字節。執行方式
serverless:由服務端發起請求,需要公網可訪問的URL。
agent:需要提前部署schedulerxAgent,由客戶端發起請求,可以配置內部URL。(僅支持1.8.2以上的客戶端版本)。部署schedulerxAgent,請參見Agent接入(腳本或HTTP任務)。
第二步:定時配置
在定時配置配置向導頁,設置定時參數和高級配置參數,然后單擊下一步。
定時參數說明如下:
配置名稱
意義
時間類型
none:無調度方式,一般通過工作流觸發。
cron:Cron表達式。
api:通過API觸發。
fixed_rate:固定頻率。
second_delay:秒級固定延遲。
onetime:一次性任務。
cron表達式(僅適用于cron時間類型)
填寫Cron表達式。可以直接按照Cron語法填寫,也可以使用工具生成并驗證。
固定頻率(僅適用于fixed_rate時間類型)
填寫固定頻率,單位為秒,僅支持60秒以上。例如,200表示每200s調度一次。
固定延遲(僅適用于second_delay時間類型)
填寫固定延遲,單位為秒。范圍為1秒~60秒。例如,5表示延遲5秒觸發調度。
當時間類型選擇Cron后,可以進行高級配置。高級配置參數說明如下:
配置名稱
說明
時間偏移
數據時間相對于調度時間的偏移,可以在調度時從上下文獲取該值。
時區
可以根據實際情況選擇不同時區,包括一些常用國家或地區,也包括標準的GMT表達方式。
第三步:通知配置
HTTP任務支持錯誤報警,當出現上述超時以及返回值不符合預期的問題時,您可以在創建任務時設置報警條件,接收相應的報警信息。
在通知配置配置向導頁,設置報警參數及聯系人,然后單擊完成。
任務創建成功后,在任務管理頁面的操作列,單擊運行一次。
出現以下結果,表明任務執行成功。
POST
使用POST請求方式,需要在客戶端中添加配置,然后在控制臺中創建任務。
第一步:基本配置
在客戶端中添加POST配置。
POST方法的配置信息如下所示。關于客戶端接入SchedulerX的詳細步驟,請參見Spring Boot應用接入SchedulerX。
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; }
在控制臺創建HTTP任務。
HTTP任務相關配置信息如下所示。關于創建調度任務,請參見創建調度任務。
Serverless HTTP任務參數說明:
配置項
描述
完整的URL
需要填寫完整的URL,包括
http://
。應答解析模式
選擇應答解析模式。支持的模式如下:
HTTP響應碼
通過HTTP響應碼應答,您需要設置標準的HTTP請求響應返回Code值。
自定義JSON
返回校驗Key和返回校驗Value。
服務端默認HTTP請求結果為JSON格式,根據填寫的Key和Value校驗結果是否成功。
{ "code": 200, "data": "true", "message": "", "requestId": "446655068791923614103381232971", "success": true }
上面的示例代碼可以校驗Key為Success,校驗value:true或者校驗Code是否為200。
自定義字符串
按您自定義的返回字符串內容完全匹配判斷任務是否執行成功。
返回校驗key和返回校驗value
服務端默認HTTP請求結果為JSON格式,根據填寫的Key和Value校驗結果是否成功。
{ "code": 200, "data": "true", "message": "", "requestId": "446655068791923614103381232971", "success": true }
上面的示例代碼可以校驗Key為Success,校驗value:true或者校驗Code是否為200。
執行超時時間(秒)
最大30秒,超過會報錯。
post參數
POST表單參數,例如
key1=val1;key2=val2
。cookie
例如
key1=val1;key2=val2
。多個值用半角分號(;)隔開,最大長度為300字節。執行方式
serverless:由服務端發起請求,需要公網可訪問的URL。
agent:需要提前部署schedulerxAgent,由客戶端發起請求,可以配置內部URL。(僅支持1.8.2以上的客戶端版本)。部署schedulerxAgent,請參見Agent接入(腳本或HTTP任務)。
第二步:定時配置
在定時配置配置向導頁,設置定時參數和高級配置參數,然后單擊下一步。
定時參數說明如下:
配置名稱 | 意義 |
時間類型 |
|
cron表達式(僅適用于cron時間類型) | 填寫Cron表達式??梢灾苯影凑誄ron語法填寫,也可以使用工具生成并驗證。 |
固定頻率(僅適用于fixed_rate時間類型) | 填寫固定頻率,單位為秒,只支持60秒以上。例如,200表示每200s調度一次。 |
固定延遲(僅適用于second_delay時間類型) | 填寫固定延遲,單位為秒。范圍為1秒~60秒。例如,5表示延遲5秒觸發調度。 |
當時間類型選擇Cron后,可以進行高級配置。高級配置參數說明如下:
配置名稱 | 意義 |
時間偏移 | 數據時間相對于調度時間的偏移,可以在調度時從上下文獲取該值。 |
時區 | 可以根據實際情況選擇不同時區,包括一些常用國家或地區,也包括標準的GMT表達方式。 |
第三步:通知配置
HTTP任務支持錯誤報警,當出現上述超時以及返回值不符合預期的問題時,您可以在創建任務時設置報警條件,接收相應的報警信息。
在通知配置配置向導頁,設置報警參數及聯系人,然后單擊完成。
任務創建成功后,在任務管理頁面的操作列,單擊運行一次。
出現以下結果,表明任務執行成功。
如何獲取任務基本信息
HTTP任務的基本信息在Header中,如需獲取任務的基本信息,需要在客戶端的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是中文,需要進行URLDecode解碼。
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常量 | key | value描述 |
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。
任務執行失敗時,單擊詳情可查看具體失敗原因,如下所示。
返回值和期望不相同
執行超時