Адрес фактического центра электронной коммерции 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
- Запуск в контейнере Docker
powerjob-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…
Адрес исходного кода проекта
Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!