Все еще пишете код планирования задач? Попробуйте эту визуальную структуру распределенного планирования!

Java задняя часть
Все еще пишете код планирования задач? Попробуйте эту визуальную структуру распределенного планирования!

Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…

Резюме

В микросервисных системах часто встречаются сценарии, в которых используется планирование задач. Например, данные регулярно синхронизируются каждый день, регулярно создаются бизнес-отчеты и регулярно очищаются журналы. Сегодня я рекомендую структуру распределенного планирования, которая поможет вам легко выполнять планирование задач!

Введение в PowerJob

PowerJOB - это новое поколение распределенного вычислительной структуры и планирования, что позволяет легко выполнять сложные задачи и планирование задач распределенных вычислений.

Ключевая особенность:

  • Простота в использовании: предоставляет интерфейсный веб-интерфейс, позволяющий разработчикам визуально управлять планированием задач и просматривать статус выполнения задач и журналы.
  • Идеальная стратегия синхронизации: он поддерживает четыре стратегии планирования времени: выражение CRON, фиксированная частота, фиксированная задержка и API.
  • Богатые режимы выполнения: он поддерживает четыре режима выполнения: автономный, широковещательный, Map и MapReduce.
  • Снижение зависимости: минимальная зависимость — это реляционная база данных (MySQL и т. д.), а расширенная — MongoDB (используется для хранения огромных онлайн-журналов).

Почему центр планирования

При нормальных обстоятельствах мы будем использоватьQuartZилиSpring TaskЭти платформы реализуют временные задачи в приложениях для планирования задач, но в рамках микросервисной архитектуры было бы неуместно, если бы многие приложения были заполнены таким кодом планирования задач. Разумное решение должно быть таким.Метод выполнения задач существует в приложении, и у нас есть центр планирования.Центр планирования отвечает за планирование этих методов.Нам нужно только настроить задачи в центре планирования.PowerJob такой распределенная структура планирования.

Подготовка к установке

Поскольку центр планирования PowerJob (powerjob-server) должен использовать MySQL для хранения данных и MongoDB для хранения журналов, мы сначала устанавливаем и запускаем эти две службы.

  • Запустите службу MySQL в контейнере Docker;
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
  • Создайте базу данных, необходимую для PowerJob, в MySQL.powerjob-product;
CREATE DATABASE IF NOT EXISTS `powerjob-product` DEFAULT CHARSET utf8mb4
  • Начните службу MongoDB в контейнере Docker.
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5

Монтажно-диспетчерский центр

Установка центра планирования PowerJob в среде Docker очень проста и выполняется за считанные минуты!

  • Скачать зеркалоpowerjob-serverОбраз докера:
docker pull tjqq/powerjob-server:latest
  • Запуск в контейнере Dockerpowerjob-serverСлужить:
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
  • После успешного прогона можно получить доступpowerjob-serverВеб-интерфейс, обратите внимание, что брандмауэр Linux должен быть открыт7700и10086Два порта, адрес доступа:http://192.168.3.101:7700/

Инициализировать исполнителя в приложении

После установки центра планирования нам нужно инициализировать исполнитель PowerJob (powerjob-worker) в приложении SpringBoot.

  • Первыйpom.xmlдобавлено вpowerjob-workerСоответствующие зависимости:
<dependency>
    <groupId>com.github.kfcfans</groupId>
    <artifactId>powerjob-worker-spring-boot-starter</artifactId>
    <version>3.2.3</version>
</dependency>
  • позжеapplication.ymlдобавить в конфигурационный файлpowerjob-workerсоответствующая конфигурация, примечаниеpowerjob.worker.app-nameэта конфигурация;
powerjob:
  worker:
    akka-port: 27777 # akka 工作端口
    app-name: mall-tiny-powerjob # 接入应用名称,用于分组隔离
    server-address: 192.168.3.101:7700 # 调度服务器地址
    store-strategy: disk # 持久化方式
  • Добавить автономный процессорStandaloneProcessor, просто наследуйBasicProcessorинтерфейс и реализацияprocessметод;
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!");
    }
}
  • После упаковки и загрузки образа запустите службу приложения SpringBoot в контейнере Docker.Обратите внимание, что настроенный часовой пояс должен соответствовать центру планирования.
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

Конфигурация и выполнение задачи

С исполнителями и центрами планирования нам нужно только настроить задачи в центре планирования для достижения планирования задач.

  • Для начала нам необходимо зарегистрировать приложение (комплексный исполнитель) в диспетчерском центре, имя приложенияapplication.ymlсерединаpowerjob.worker.app-nameатрибут, вотmall-tiny-powerjob:123456;

  • После этого мы можем увидеть информацию о машине на главной странице;

  • позже任务管理Добавляем задачу в функцию, здесь используемCRONнастройка режима每20秒Выполнить метод обработки в экзекьюторе;

  • Нажмите в список задач运行запустить задачу;

  • Нажмите в списке задач更多->运行记录Вы можете просмотреть журнал выполнения задачи;

  • нажмите日志Вы можете просмотреть журналы, зарегистрированные в процессоре,jobParamsДля параметров, которые мы задали при создании задачи ранее;

  • нажмите详情Вы можете просмотреть результаты этой триггерной задачи, то есть мы находимся вProcessResultинформация возвращена в .

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

Официальная документация:GitHub.com/KFC fan/pow…

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!