xxl-jobソース分析

6814 ワード

1スケジューリングセンタAPIサービス
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