micro-job分散式任務排程框架更新

weixin_34249678發表於2019-02-22

micro-job是一款分散式任務排程執行框架,內部通過各個元件的Jersey共享出的Rest路徑進行資料訪問。

詳細開發文件 訪問官網

名詞解釋:

consumer -> 任務消費節點

schedule -> 任務排程器

provider -> 任務生產者

registry -> 任務註冊中心

任務註冊中心(registry)

registry是任務註冊中心,在整個生態圈內擔任著各個元件註冊節點的任務,任務註冊中心實現方式是多樣化的,目前包含:memoryzookeeperredisconsul等。

通過idea、eclipse工具建立SpringBoot專案並新增如下依賴到pom.xml檔案內。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-registry-memory</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources資源目錄下新增application.yml配置檔案,配置內容如下所示:

server:
   port: 9000
hengboy:
  job:
    registry:
      # 任務註冊中心節點註冊方式
      away: memory

任務排程器(schedule)

schedule是任務排程器,每一個任務的建立都是通過排程器進行分配執行,分配過程中根據消費節點的負載均衡策略配置進行不同消費者節點任務消費。

在生產任務時,也會根據排程器的負載均衡策略來進行篩選執行任務排程的排程器節點

通過idea、eclipse工具建立SpringBoot專案並新增如下依賴到pom.xml檔案內。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-schedule</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources資源目錄下新增application.yml配置檔案,配置內容如下所示:

server:
   port: 8081
hengboy:
  job:
    registry:
      # 保持與任務註冊中心節點註冊方式一致即可
      away: memory
    schedule:
      # 記憶體方式排程器處理任務佇列以及任務日誌的儲存
      job-store-type: memory  

任務消費節點(consumer)

consumer是任務消費者執行節點,任務由consumer進行定義以及上報,當schedule呼叫消費者執行任務請求時,會自動根據jobKey來執行對應的任務邏輯方法。

通過idea、eclipse工具建立SpringBoot專案並新增如下依賴到pom.xml檔案內。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-consumer</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources資源目錄下新增application.yml配置檔案,配置內容如下所示:

server:
   port: 8082
hengboy:
  job:
    registry:
      # 保持與任務註冊中心節點註冊方式一致即可
      away: memory

任務定義示例

我們來定義一個簡單的Job,示例如下所示:

@Job(jobExecuteAway = JobExecuteAwayEnum.ONCE)
public class TestJob implements MicroJob {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(TestJob.class);

    @Override
    public JobExecuteResult execute(JobExecuteParam jobExecuteParam) throws JobException {
        logger.info("執行Key:{},執行引數:{}", jobExecuteParam.getJobKey(), jobExecuteParam.getJsonParam());
        return JobExecuteResult.JOB_EXECUTE_SUCCESS;
    }
}

在上面定義的Job對應的JobKeytestJob.

任務生產節點(provider)

provider是任務生產節點,由業務方進行新增依賴並執行MicroJobProvider.newXxxJob呼叫建立任務,如:建立訂單後執行傳送郵件通知操作。

通過idea、eclipse工具建立SpringBoot專案並新增如下依賴到pom.xml檔案內。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-provider</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources資源目錄下新增application.yml配置檔案,配置內容如下所示:

server:
  port: 8083
hengboy:
  job:
    registry:
      # 保持與任務註冊中心節點註冊方式一致即可
      away: memory

任務執行示例

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTester {
    /**
     * 註冊任務提供者
     */
    @Autowired
    private MicroJobProvider microJobProvider;

    @Test
    public void newJob() {
        // 建立的任務僅執行一次
        microJobProvider.newOnceJob(OnceJobWrapper.Context()
                // 對應consumer內定義任務的jobKey,預設為類名首字母小寫
                .jobKey("testJob")
                // 自定義的任務佇列key,可以準確定位任務並操作暫停、刪除等操作
                .jobQueueKey(UUID.randomUUID().toString())
                // 引數,任意型別引數,consumer消費時會轉換為json字串
                .param(new HashMap() {
                    {
                        put("name", "admin");
                    }
                })
                .wrapper());
    }
}

測試流程

  1. 啟動任務註冊中心
  2. 啟動任務排程中心
  3. 啟動任務消費者節點
  4. 執行ProviderTester#newJob單元測試方法

Folders

​```
.
├── micro-job-autoconfigure
├── micro-job-dependencies
├── micro-job-samples
│   ├── sample-consumer
│   ├── sample-provider
│   ├── sample-registry-consul
│   ├── sample-registry-memory
│   ├── sample-registry-redis
│   ├── sample-registry-zookeeper
│   ├── sample-schedule
│   ├── pom.xml
│   └── README.md
├── micro-job-starters
│   ├── spring-boot-starter
│   ├── spring-boot-starter-provider
│   ├── spring-boot-starter-registry-consul
│   ├── spring-boot-starter-registry-memory
│   ├── spring-boot-starter-registry-redis
│   ├── spring-boot-starter-registry-zookeeper
│   ├── spring-boot-starter-schedule
│   └── pom.xml
├── .travis.yml
├── LICENSE
├── pom.xml
└── README.md
​```

License

The Apache License

相關文章