xxl-jobソース分析
6814 ワード
1スケジューリングセンタAPIサービス
API暴露コード:com.xxl.job.admin.controller.JobApiController.java
APIサービス位置:com.xxl.job.core.biz.AdminBiz.java
要求パラメータマッチング対応方法で反射実行後、結果をクライアントに返す、コードcomを参照する.xxl.rpc.remoting.provider.X xlRpcProviderFactoryinvokeServiceメソッドinvokeService
2タスク登録/
エフェクタ登録
タスク登録は「アクチュエータ」を最小粒度として登録する.各タスクは、バインドされたアクチュエータによって対応するアクチュエータマシンのリストを感知することができる.レジストリ:「XXL_JOB_QRTZ_TRIGGER_REGISTRY」表を参照.
3アクチュエータAPIサービス
アクチュエータはAPIサービスを提供し、スケジューリングセンターの選択に使用され、現在提供されているAPIサービスは以下の通りである.
APIサービス位置:com.xxl.job.core.biz.ExecutorBizAPIサービス要求参照コード:com.xxl.job.executor.ExecutorBizTest
API露出コードフラグメント
APIリモートコールコード、jettyはhandlerの登録を開始し、handlerはAPIリモートコール処理ロジックを含む
参考資料
http://www.xuxueli.com/xxl-job/#/?id=_59-%e5%88%86%e7%89%87%e5%b9%bf%e6%92%ad-amp-%e5%8a%a8%e6%80%81%e5%88%86%e7%89%87
転載先:https://www.cnblogs.com/birdstudio/p/10246351.html
1、 ;
2、 ;
3、 ;
4、 , ;
API暴露コード:com.xxl.job.admin.controller.JobApiController.java
APIサービス位置:com.xxl.job.core.biz.AdminBiz.java
要求パラメータマッチング対応方法で反射実行後、結果をクライアントに返す、コードcomを参照する.xxl.rpc.remoting.provider.X xlRpcProviderFactoryinvokeServiceメソッドinvokeService
2タスク登録/
エフェクタ登録
タスク登録は「アクチュエータ」を最小粒度として登録する.各タスクは、バインドされたアクチュエータによって対応するアクチュエータマシンのリストを感知することができる.レジストリ:「XXL_JOB_QRTZ_TRIGGER_REGISTRY」表を参照.
" "
登録コードはcom.xxl.job.core.thread.ExecutorRegistryThreadメソッドstartは、" "
の起動時にcomをリモートで呼び出す.xxl.job.core.biz.AdminBizメソッド登録." " , AppName ; " " AppName ; : Beat 30s; Beat , Beat ; Beat; : , ,
.コードcom.xxl.job.admin.core.thread.JobRegistryMonitorHelper 3アクチュエータAPIサービス
アクチュエータはAPIサービスを提供し、スケジューリングセンターの選択に使用され、現在提供されているAPIサービスは以下の通りである.
1、 :
2、 :
3、 : ; , API ;
4、 Rolling Log:
5、 :
APIサービス位置:com.xxl.job.core.biz.ExecutorBizAPIサービス要求参照コード:com.xxl.job.executor.ExecutorBizTest
API露出コードフラグメント
com.xxl.job.core.executor.XxlJobExecutor.initRpcProvider()
// add services
xxlRpcProviderFactory.addService(ExecutorBiz.class.getName(), null, new ExecutorBizImpl());
APIリモートコールコード、jettyはhandlerの登録を開始し、handlerはAPIリモートコール処理ロジックを含む
com.xxl.rpc.remoting.net.impl.jetty.server.JettyServer.start()
JettyServer.this.server.setConnectors(new Connector[]{connector});
HandlerCollection handlerc = new HandlerCollection();
handlerc.setHandlers(new Handler[]{new JettyServerHandler(xxlRpcProviderFactory)});
JettyServer.this.server.setHandler(handlerc);
com.xxl.rpc.remoting.net.impl.jetty.server.JettyServerHandler.handle()
XxlRpcResponse xxlRpcResponse = this.xxlRpcProviderFactory.invokeService(xxlRpcRequest);
byte[] responseBytes = this.xxlRpcProviderFactory.getSerializer().serialize(xxlRpcResponse);
this.writeResponse(baseRequest, response, responseBytes);
com.xxl.rpc.remoting.provider.XxlRpcProviderFactory.invokeService()
XxlRpcResponse xxlRpcResponse = new XxlRpcResponse();
xxlRpcResponse.setRequestId(xxlRpcRequest.getRequestId());
String serviceKey = makeServiceKey(xxlRpcRequest.getClassName(), xxlRpcRequest.getVersion());
Object serviceBean = this.serviceData.get(serviceKey);
if (serviceBean == null) {
xxlRpcResponse.setErrorMsg("The serviceKey[" + serviceKey + "] not found.");
return xxlRpcResponse;
} else if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 180000L) {
xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit.");
return xxlRpcResponse;
} else if (this.accessToken != null && this.accessToken.trim().length() > 0 && !this.accessToken.trim().equals(xxlRpcRequest.getAccessToken())) {
xxlRpcResponse.setErrorMsg("The access token[" + xxlRpcRequest.getAccessToken() + "] is wrong.");
return xxlRpcResponse;
} else {
try {
Class> serviceClass = serviceBean.getClass();
String methodName = xxlRpcRequest.getMethodName();
Class>[] parameterTypes = xxlRpcRequest.getParameterTypes();
Object[] parameters = xxlRpcRequest.getParameters();
Method method = serviceClass.getMethod(methodName, parameterTypes);
method.setAccessible(true);
Object result = method.invoke(serviceBean, parameters);
xxlRpcResponse.setResult(result);
} catch (Throwable var11) {
logger.error("xxl-rpc provider invokeService error.", var11);
xxlRpcResponse.setErrorMsg(ThrowableUtil.toString(var11));
}
return xxlRpcResponse;
}
参考資料
http://www.xuxueli.com/xxl-job/#/?id=_59-%e5%88%86%e7%89%87%e5%b9%bf%e6%92%ad-amp-%e5%8a%a8%e6%80%81%e5%88%86%e7%89%87
転載先:https://www.cnblogs.com/birdstudio/p/10246351.html