1. 程式人生 > >分散式任務排程平臺XXL-JOB--原始碼解析六:executor執行器原始碼解析之啟動jetty服務接受請求並執行排程

分散式任務排程平臺XXL-JOB--原始碼解析六:executor執行器原始碼解析之啟動jetty服務接受請求並執行排程

啟動jetty服務並執行排程

1.1 啟動一個jetty server服務

    首先載入ServerConnector, 載入HandlerCollection並設定handlers, 其中connector負責接受客戶端http請求, 而handlers負責處理客戶端請求, 最後就是呼叫start()方法啟動jetty服務.

1.2 負責處理admin排程中心請求的JettyServerHandler

其實底層就是通過解析admin排程中心傳遞過來的request引數, 獲取類名, 方法名, 引數以及引數型別, 執行反射呼叫, 並且將最終結果返回給排程中心.

1.3 NetComServerFactory類根據引數, 執行反射呼叫

    這樣admin排程中心就與executor完成了一次排程時的通訊, 即每次當admin排程中心cron時間片到達後, 就會觸發一次排程, 通過呼叫executor事先已經暴露的Jetty服務, 呼叫executor執行器服務, 進行本次的任務排程.

1.4 本篇加上前幾篇解析的文章, 對於xxl-job分散式定時任務框架的原理做一個總結

    首先admin排程中心提供心跳註冊的http介面, 提供同一個group組下的每個executor執行器初始化時, 利用心跳機制, 向admin排程中心彙報自己jetty server暴露服務的ip+port.而admin排程中心, 再根據使用者在前臺頁面配置的路由排程策略, 阻塞策略, cron表示式以及執行模式, 動態可配置化操作定時job的執行. 當配置的cron時間片到達後, 會通過動態代理的方式, 發起一次http請求, 呼叫executor執行器的服務, 並且接收執行結果, 判斷本次排程是否成功.

    而接著executor執行器端, 在初始化時, 就開啟一個專門用於註冊自己服務的工作執行緒, 向排程中心彙報自己提供的jetty服務地址及埠, 通過暴露自己的jetty server服務, 接收admin排程中心的每一次http排程請求, 再解析admin排程中心傳送的request請求引數, 獲取到本次呼叫的類名, 方法名稱, 方法引數以及引數型別, 執行反射呼叫執行類, 並將執行結果返回給admin排程中心.

到此為止, 本次xxl-job分散式任務排程框架解析就告一段落.

美滋滋, 睡覺^_^