Первый опыт распределенного планирования задач XXL-JOB

распределенный

оригинал:gcdd1993.github.io/распределенное планирование задач XXL-…

Введение

XXL-JOBЭто легкая распределенная платформа планирования задач, основными целями которой являются быстрая разработка, простота обучения, малый вес и легкое расширение. Теперь с открытым исходным кодом и подключен к линейкам онлайн-продуктов многих компаний, из коробки.

Официальная документация очень полная, поэтому я не буду вдаваться в подробности. Эта статья в основном построенаXXL-JOBи простые в использовании записи.

Собрать терминал управления xxl-job-admin

Рабочая среда

  • Убунту 16.04 64 бит
  • Mysql 5.7

Установить MySQL

$ sudo apt-get update
$ sudo apt-get install mysql-server

## 设置mysql,主要是安全方面的,密码策略等
$ mysql_secure_installation
## 配置远程访问
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
$ sudo service mysql restart
$ sudo service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-06-05 13:23:41 HKT; 45s ago
...

создать базу данных

$ mysql -u root -p
mysql> CREATE database if NOT EXISTS `xxl-job` default character set utf8 collate utf8_general_ci;

Создать пользователя

$ mysql -u root -p
mysql> CREATE USER 'xxl-job'@'%' IDENTIFIED BY 'xxlJob2019@';
mysql> GRANT ALL PRIVILEGES ON `xxl-job`.* TO 'xxl-job'@'%';

Локальный тест xxl-job-admin

Получить последний исходный код

$ git clone git@github.com:xuxueli/xxl-job.git
$ cd xxl-job

импортировать проект

я более знакомIdeaинструменты разработки, так что используйте здесьIdeaизGradleПроект для демонстрации.

Открытьxxl-job, структура проекта следующая

Тестовые задания

Открытьxxl-job-admin/resources/application.properties, изменить информацию о подключении к mysql

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.32.129:3306/xxl-job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=xxl-job
spring.datasource.password=xxlJob2019@

использовать/xxl-job/doc/db/tables_xxl_job.sqlИнициализировать базу данных, инициализация должна быть следующей

Когда все будет готово, вы можете запустить проект, затем откройте адрес http://localhost:8080/xxl-job-admin, и вы увидите домашнюю страницу.

развертывать

Центр упаковки и отправки

$ cd /xxl-job
$ mvn install
...
[INFO] xxl-job ............................................ SUCCESS [  0.513 s]
[INFO] xxl-job-core ....................................... SUCCESS [  4.258 s]
[INFO] xxl-job-admin ...................................... SUCCESS [  5.525 s]
[INFO] xxl-job-executor-samples ........................... SUCCESS [  0.016 s]
[INFO] xxl-job-executor-sample-spring ..................... SUCCESS [  2.188 s]
[INFO] xxl-job-executor-sample-springboot ................. SUCCESS [  0.892 s]
[INFO] xxl-job-executor-sample-jfinal ..................... SUCCESS [  1.753 s]
[INFO] xxl-job-executor-sample-nutz ....................... SUCCESS [  1.316 s]
[INFO] xxl-job-executor-sample-frameless .................. SUCCESS [  0.358 s]
[INFO] xxl-job-executor-sample-jboot ...................... SUCCESS [  1.279 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  18.549 s
[INFO] Finished at: 2019-06-05T14:40:25+08:00
[INFO] ------------------------------------------------------------------------

См. приведенную выше информацию, указывающую на то, что мы успешно упаковали, в/xxl-job/xxl-job-adminВ каталоге будет файл jar:xxl-job-admin-2.1.0-SNAPSHOT.jar

Развернуть на сервер

$ sudo apt install openjdk-8-jdk
$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.16.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)

$ sudo mkdir -p /data/xxl-job
$ sudo cd /data/xxl-job
## 上传我们打包好的jar至此目录,并添加软连接
$ sudo ln -s xxl-job-admin-2.1.0-SNAPSHOT.jar current.jar

## 注册为system服务,可以达到异常重启,开机自启等目的
$ sudo vim /etc/systemd/system/xxl-job.service
Description=xxl-job Service Daemon
After=mysql.service
[Service]
Type=simple
Environment="JAVA_OPTS= -Xmx1024m -Xms1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:NewRatio=3"
ExecStart=java -jar /data/xxl-job/current.jar
Restart=always
WorkingDirectory=/data/xxl-job/
[Install]
WantedBy=multi-user.target

$ sudo systemctl enable xxl-job.service
$ sudo service xxl-job start
$ sudo service xxl-job status
● xxl-job.service
   Loaded: loaded (/etc/systemd/system/xxl-job.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-06-05 15:30:08 HKT; 2min 34s ago
...

Заходим на http://192.168.32.129:8080/xxl-job-admin:

планирование тестовых заданий

Выше был построен наш терминал управления планированием задач, теперь давайте проверим планирование задач.

Используйте встроенныйSpringBootТестовые заданияxxl-job-executor-sample-springbootДля проверки измените файл конфигурации

xxl-job-executor-sample-springboot=http://192.168.32.129:8080/xxl-job-admin

пользовательская задача

Напишите простую задачу, которая печатает текущую последовательность 100 раз.

package com.xxl.job.executor.service.jobhandler;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * TODO
 *
 * @author gaochen
 * @date 2019/6/5
 */
@JobHandler(value="gcddJobHandler")
@Component
public class GcddJobHandler extends IJobHandler {
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        for (int i = 0; i < 100; i++) {
            XxlJobLogger.log("XXL-JOB, print " + i);
            TimeUnit.SECONDS.sleep(1);
        }
        return SUCCESS;
    }
}

запустить исполнителя

Затем запустите исполнителя.После завершения запуска мы обнаружим, что список исполнителей на странице управления будет иметь больше исполнителей, которые мы только что запустили.

добавить задачу

Посмотреть журнал выполнения задачи

Видно, что задание успешно выполнено по нашему плану, что очень удобно.

Эпилог

Для получения более подробной информации, пожалуйста, посетитеxxl-job официальный сайт