XxlJobSpringExecutor







XxlRpcProviderFactory
看名字就知道這個類是可以返回Rpc調用服務提供端的工廠類,接上文,看他的initRpcProvider方法。



此時的ServiceRegistry為ExecutorServiceRegistry,調用其start,以30秒的間隔和調度中心進行心跳通知,然后調用server的start方法,此時server為NettyHttpServer。
整個代碼結構就是用netty啟動了個服務,來看最后一個ChannelHandler,NettyHttpServerHandler。
調用私有方法process。
這里調用了xxlRpcProviderFactory的invokeService方法完成了服務實現的反射調用。
從serviceData中拿到我們之前調用addService方法添加的服務實現類,這里是ExecutorBizImpl,這里反射調用的方法是run。
ExecutorBizImpl
這個類實現了ExecutorBiz接口,看接口定義的方法,主要是作為執行器,提供給調度中心幾個接口方法。
重點來看run方法。
首先XxlJobExecutor內部會有個以jobId為key,執行這個任務的線程為value的字段jobThreadRepository,我們首先去嘗試的獲取當前正在執行這個任務的線程,如果有,那就根據任務設置的運行模式進行處理,如下圖。
如果沒有正在執行此任務的線程,那就調用XxlJobExecutor.registJobThread()啟動一個線程,最后將任務數據推送給這個可能是從jobThreadRepository獲取到的也可能是新創建的線程,如下圖。
JobThread的run方法會從triggerQueue里poll出任務,然后用之前設置的 handler進行execute的方法調用,並利用idleTimes字段進行線程無任務空轉的次數控制,如下圖。
至此,執行器完成了啟動,暴露ExecutorBiz服務,接收任務調度數據TriggerParam,並在JobThread線程中完成任務配置的業務handler的執行。