xxl-job — Открытый исходный Распределенная структура по коду планирования задачи, это может помочь вам достичь запланированных Планирование и управление задачами.
🌊 Подпишитесь на меня, чтобы не потеряться. Если эта статья вам полезна или у вас есть какие-либо вопросы, оставьте сообщение в области комментариев, я обычно отвечу, когда увижу ее. Пожалуйста, поставьте лайк и поддержите~ 💗
1. В повседневных бизнес-сценариях часто встречаются сценарии, в которых необходимо использовать запланированные задачи
1. Отправляйте купоны, отправляйте текстовые сообщения и т. д. в определенный момент времени.
2. Отчет
3. рептилия
1. Пакетная статистика счетов за прошлый месяц, статистика продаж за прошлый месяц и т. д.
1. Его нужно выполнять каждые 5 минут и т.д.
В Java традиционные решения для реализации запланированных задач, такие как Timer, Quartz и т. д.
Кластеризация не поддерживается、Статистика не поддерживается、Нет платформы управления、Нет сигнала неисправности、Нетмонитори т. д.
1. Если задачи нескольких экземпляров одной и той же службы являются взаимоисключающими, требуется единое планирование.
2. Планирование Задача должна поддерживать высокую доступность, мониторинг и сигналы тревоги о неисправностях.
3. Необходимость единообразного управления и отслеживания каждого узла обслуживания Планирование Результаты задачи необходимо записывать и сохранять информацию об атрибутах задачи и т. д.
1. нераспределенный
На одном сервере создавайте запланированные задачи
@Scheduled
2. распределенный
разбрасывать,Плановые задачи с низкой надежностью интегрированы в единую платформу,И реализовать планирование управления кластером ираспределенный Тип развертываниязапланированные стиль управления задачей,называетсяраспределенныйзапланированные задачи。
2.1 Quartz
пионер
Нет графического интерфейса
Интерфейс не удобный
2.2 Elasticjob
На основе кварца
elastic-job Он основан на кварце от Dangdang.com. решение распределенного планирования после вторичной разработки
Зависит от большого количества промежуточного программного обеспечения zk,
2.3 xxl-job
Разработано разработчиками из Мэйтуань-Дяньпина
2.4 SchedulerX
Фреймворк, разработанный Alibaba Cloud.
Коммерческие продукты
2.5 PowerJob
личный
2.6 контраст
1. На этот раз я использую версию 2.3.0
2. Я чувствую, что это ошибка При запуске нескольких служб xxl-job время ожидания одной службы всегда истекает.
1. https://www.xuxueli.com/xxl-job/
2. https://gitee.com/xuxueli0323/xxl-job/
1. xxl-job — Открытый с Dianping.com Сюй Сюэри (xxl — первая буква пиньинь имени автора) исходный код проекта,Официальный сайт Представленное выше, этолегкийраспределенный Структура планирования задач,
2. Основная цель дизайна — быстрое развитие.、Легко учиться, легкий, легко расширяемый. В отличие от эластичной работы,Среда xxl-job зависит от MySQL,Нет необходимости в ZooKeeper,Это также самая большая разница.
3. xxl-jobЦентральная диспетчерская площадкалегкий,Готов из коробки,Простота в эксплуатации,Быстро начать,Очень хорошая интеграция с SpringBoot.,А интерфейс мониторинга интегрирован в диспетчерский центр,Интерфейс простой и простой,
4. Стоимость обслуживания для предприятий невелика, также предусмотрены оповещения по электронной почте о сбоях и так далее. Это заставляет многие компании выбирать xxl-job в качестве платформы для планирования.
1. Модуль планирования (центр планирования)
1.1 Отвечает за управление информацией о планировании и выдачу запросов на планирование в соответствии с графиком. Не несет ответственности за бизнес-код.
1.2 Отделение системы планирования от задач повышает доступность и стабильность системы, а производительность системы планирования больше не ограничивается модулем задач;
1.3 Поддержка визуального, простого и динамичного управления и планирования информации,Включает создание задач,возобновлять,удалить,Сигнализация задачи и т. д.,Все вышеперечисленные операции вступят в силу в режиме реального времени.,Он также поддерживает мониторинг результатов планирования и журналов выполнения.,Поддержка исполнителя при отказе
2. Исполнительный модуль (исполнитель)
1. Отвечает за получение запросов на планирование и выполнение логики задач. Модуль задач фокусируется на таких операциях, как выполнение задач, что делает разработку и обслуживание более простыми и эффективными; Получать запросы на выполнение, запросы на завершение, запросы журнала и т. д. из «Центра планирования».
3. Схема функциональной архитектуры
1. Установить время
2. Кластер, используемая стратегия
3. При создании задачи будет указано имя и адрес задачи.
1. Адрес системы диспетчеризации на Конфигурация
2. Создайте задачу и укажите имя задачи на задаче
1. https://github.com/xuxueli/xxl-job/releases/tag/2.3.0
1. /xxl-job-2.3.0/doc/db/tables_xxl_job.sql
2. Выполните файл sql для создания базы данных
1. mvn clean -U package -Dmaven.test.skip=true
1. java -jar xxl-job-admin-2.3.0.jar --server.port=8088
2. http://localhost:8088/xxl-job-admin/toLogin
3. Имя пользователя и пароль
admin
123456
4. Основной интерфейс
1. Запустите модуль планирования xll-job-admin и запустите его напрямую.
2. xxl-job-excuotr нужен адрес Конфигурацияxxl-job-admin и активно зарегистрируйтесь в Xxl-job-admin.
3. блок-схема
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
server:
port: 8011
xxl:
job:
admin:
addresses: http://127.0.0.1:8000/xxl-job-admin
executor:
appname: yby-job-2
logpath: /Users/yangbuyi/Documents/распределенный Планирование задач/log
@Component
@Slf4j
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setLogPath(logPath);
return xxlJobSpringExecutor;
}
}
1. Имя исполнителя должно совпадать с именем файла конфигурации. Названия приложений одинаковы
1. Это балансировщик нагрузки
2. Когда есть только одно Планирование задачцентр, Когда имеется несколько исполнителей ,Планирование задача Центр хочет выбрать одного или нескольких исполнителей для выполнения задачи
1. Настройки разрешают параллельные запуски
2. Изменить порт yml — запустить
1. Изменение планировщика управления задачами при отказе
2. Когда машина сломалась, Перейдите на другую машину
1. Доступ в порядке, который мы зарегистрировали у исполнителя
2. Остановим первый сервер (простой)
2. После простоя (10001) xxl-job отправит контрольный сигнал, чтобы проверить, можно ли его вызвать. Если запрос не может быть выполнен, xxl-job продолжит выполнение по порядку, а затем наступит очередь 9999. для выполнения операций планирования задач
1. Получить индекс текущего сервиса: XxlJobHelper.getShardIndex();
2. Получите общее количество регистраций исполнителей: XxlJobHelper.getShardTotal();
3. Измените политику маршрутизации задач на: фрагментированная трансляция
4. Запустите 3 службы (потому что я обнаружил, что при запуске нескольких служб у одной из них всегда есть таймаут запроса, поэтому, если мы хотим использовать 2, просто запустите еще одну. Официальное решение этой ошибки пока не предоставлено.)
5. Начать просмотр задачифрагментированная трансляция-Задачи были отправлены в два сервиса соответственно.
@XxlJob("myJobHandler")
public ReturnT<String> execute() {
// Текущий номер отправки Общее количество машин
List<Integer> users = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
for (Integer user : users) {
// Получать Общее количество машин getShardTotal
// Получить индекс текущей машины getShardIndex
if (user % XxlJobHelper.getShardTotal() == XxlJobHelper.getShardIndex()) {
log.info("Отправить текстовое сообщение студенту {}: index={},total={}", user, XxlJobHelper.getShardIndex(), XxlJobHelper.getShardTotal());
}
}
return ReturnT.SUCCESS;
}
Мы только что упомянули, что существует множество стратегий маршрутизации, но обычно используются эти две.
Этот вопрос исчерпан. Увидимся в следующий раз👋~
🌊 Подпишитесь на меня, чтобы не потеряться. Если эта статья вам полезна или у вас есть какие-либо вопросы, оставьте сообщение в области комментариев, я обычно отвечу, когда увижу ее. Пожалуйста, поставьте лайк и поддержите~ 💗