开发技巧Java学习笔记Java 杂谈

还在手写任务调度代码?试试这款可视化分布式调度框架

2020-09-21  本文已影响0人  程序员知识圈

在微服务系统中,经常会有用到任务调度的场景。比如每天定时同步数据、定时生成业务报表、定期清理日志等。今天给大家推荐一个分布式调度框架,助你你轻松完成任务调度工作!

PowerJob 简介

PowerJob是全新一代分布式调度与计算框架,能让你轻松完成任务的调度与繁杂任务的分布式计算。

主要特性:

为什么要有调度中心

一般情况下我们会使用QuartZ或Spring Task这些框架在应用中实现定时任务来进行任务调度,但是在微服务架构下,如果很多应用都充斥着这种任务调度代码就显得有些不合适。合理的方案应该是这样的,任务的执行方法存在于应用中,而我们有一个调度中心,调度中心负责调度这些方法,我们只需在调度中心配置好任务即可,PowerJob正是这样一个分布式调度框架。

安装准备

由于PowerJob的调度中心(powerjob-server)需要使用MySQL存储数据,使用MongoDB存储日志,所以我们先安装并启动这两个服务。

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
CREATE DATABASE IF NOT EXISTS `powerjob-product` DEFAULT CHARSET utf8mb4
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5

安装调度中心

在Docker环境下安装PowerJob的调度中心非常简单,分分钟搞定!

docker pull tjqq/powerjob-server:latest
docker run -p 7700:7700 -p 10086:10086 --name powerjob-server \
--link mysql:db \
--link mongo:mongo \
-e TZ="Asia/Shanghai" \
-e JVMOPTIONS="" \
-e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://db:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.datasource.core.username=root --spring.datasource.core.password=root --spring.data.mongodb.uri=mongodb://mongo:27017/powerjob-product" \
-v ~/docker/powerjob-server:/mydata/powerjob/powerjob-server \
-v ~/.m2:/mydata/powerjob/.m2 \
-d tjqq/powerjob-server:latest
还在手写任务调度代码?试试这款可视化分布式调度框架

在应用中初始化执行器

安装完调度中心后,我们需要在SpringBoot应用中初始化PowerJob的执行器(powerjob-worker)。

<dependency>
    <groupId>com.github.kfcfans</groupId>
    <artifactId>powerjob-worker-spring-boot-starter</artifactId>
    <version>3.2.3</version>
</dependency>
powerjob:
  worker:
    akka-port: 27777 # akka 工作端口
    app-name: mall-tiny-powerjob # 接入应用名称,用于分组隔离
    server-address: 192.168.3.101:7700 # 调度服务器地址
    store-strategy: disk # 持久化方式
package com.macro.mall.tiny.job;

@Slf4j
@Component
public class StandaloneProcessor implements BasicProcessor {

    @Override
    public ProcessResult process(TaskContext context){
        //OmsLogger可以直接将日志上报到powerjob-server
        OmsLogger omsLogger = context.getOmsLogger();
        omsLogger.info("StandaloneProcessor start process,context is {}.", context);
        log.info("jobParams is {}", context.getJobParams());
        return new ProcessResult(true, "Process success!");
    }
}
docker run -p 8080:8080 --name mall-tiny-powerjob \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-powerjob/logs:/var/logs \
-e TZ="Asia/Shanghai" \
-d mall-tiny/mall-tiny-powerjob:1.0-SNAPSHOT

任务的配置与执行

有了执行器和调度中心,我们只需在调度中心中配置好任务即可实现任务调度。

还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架 还在手写任务调度代码?试试这款可视化分布式调度框架
上一篇下一篇

猜你喜欢

热点阅读