Учебное пособие для мастера: Master xxl-job Распределенное планирование задач из нулевого базового планирования заданий
Учебное пособие для мастера: Master xxl-job Распределенное планирование задач из нулевого базового планирования заданий

Предисловие

xxl-job — Открытый исходный Распределенная структура по коду планирования задачи, это может помочь вам достичь запланированных Планирование и управление задачами.

Введите описание изображения
Введите описание изображения

🌊 Подпишитесь на меня, чтобы не потеряться. Если эта статья вам полезна или у вас есть какие-либо вопросы, оставьте сообщение в области комментариев, я обычно отвечу, когда увижу ее. Пожалуйста, поставьте лайк и поддержите~ 💗

Нравиться
Нравиться

я участвуюНа втором этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будут отмечены призовые эссе, которые разделят призовой фонд в 10 000 юаней и часы с клавиатурой.

Сценарий планирования задач

Обзор

Язык кода:txt
копировать
1. В повседневных бизнес-сценариях часто встречаются сценарии, в которых необходимо использовать запланированные задачи

сценарий, управляемый временем

Язык кода:txt
копировать
1. Отправляйте купоны, отправляйте текстовые сообщения и т. д. в определенный момент времени.
2. Отчет
3. рептилия
Пакетная обработка данных
Язык кода:txt
копировать
1. Пакетная статистика счетов за прошлый месяц, статистика продаж за прошлый месяц и т. д.

Сценарий с фиксированной частотой

Язык кода:txt
копировать
1. Его нужно выполнять каждые 5 минут и т.д.	

Зачем вам нужна платформа планирования задач

В Java традиционные решения для реализации запланированных задач, такие как Timer, Quartz и т. д.

недостаток

Язык кода:txt
копировать
Кластеризация не поддерживается、Статистика не поддерживается、Нет платформы управления、Нет сигнала неисправности、Нетмонитори т. д.

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

Язык кода:txt
копировать
1. Если задачи нескольких экземпляров одной и той же службы являются взаимоисключающими, требуется единое планирование.
2. Планирование Задача должна поддерживать высокую доступность, мониторинг и сигналы тревоги о неисправностях.
3. Необходимость единообразного управления и отслеживания каждого узла обслуживания Планирование Результаты задачи необходимо записывать и сохранять информацию об атрибутах задачи и т. д.

Структура планирования задач

Язык кода:txt
копировать
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 контраст
2.6 контраст
2.6 контраст

XXL-job

Язык кода:txt
копировать
1. На этот раз я использую версию 2.3.0
2. Я чувствую, что это ошибка При запуске нескольких служб xxl-job время ожидания одной службы всегда истекает.
Официальный сайт
Язык кода:txt
копировать
1. https://www.xuxueli.com/xxl-job/
2. https://gitee.com/xuxueli0323/xxl-job/
Обзор
Язык кода:txt
копировать
1. xxl-job — Открытый с Dianping.com Сюй Сюэри (xxl — первая буква пиньинь имени автора) исходный код проекта,Официальный сайт Представленное выше, этолегкийраспределенный Структура планирования задач,
Язык кода:txt
копировать
2. Основная цель дизайна — быстрое развитие.、Легко учиться, легкий, легко расширяемый. В отличие от эластичной работы,Среда xxl-job зависит от MySQL,Нет необходимости в ZooKeeper,Это также самая большая разница.
Язык кода:txt
копировать
3. xxl-jobЦентральная диспетчерская площадкалегкий,Готов из коробки,Простота в эксплуатации,Быстро начать,Очень хорошая интеграция с SpringBoot.,А интерфейс мониторинга интегрирован в диспетчерский центр,Интерфейс простой и простой,
Язык кода:txt
копировать
4. Стоимость обслуживания для предприятий невелика, также предусмотрены оповещения по электронной почте о сбоях и так далее. Это заставляет многие компании выбирать xxl-job в качестве платформы для планирования.
Состав системы
Язык кода:txt
копировать
1. Модуль планирования (центр планирования)
	1.1 Отвечает за управление информацией о планировании и выдачу запросов на планирование в соответствии с графиком. Не несет ответственности за бизнес-код.
	
Язык кода:txt
копировать
	1.2 Отделение системы планирования от задач повышает доступность и стабильность системы, а производительность системы планирования больше не ограничивается модулем задач; 
Язык кода:txt
копировать
1.3 Поддержка визуального, простого и динамичного управления и планирования информации,Включает создание задач,возобновлять,удалить,Сигнализация задачи и т. д.,Все вышеперечисленные операции вступят в силу в режиме реального времени.,Он также поддерживает мониторинг результатов планирования и журналов выполнения.,Поддержка исполнителя при отказе
Язык кода:txt
копировать
2. Исполнительный модуль (исполнитель)
	1. Отвечает за получение запросов на планирование и выполнение логики задач. Модуль задач фокусируется на таких операциях, как выполнение задач, что делает разработку и обслуживание более простыми и эффективными; Получать запросы на выполнение, запросы на завершение, запросы журнала и т. д. из «Центра планирования».
3. Схема функциональной архитектуры
3. Схема функциональной архитектуры
3. Схема функциональной архитектуры

2 персонажа

Система управления задачами по планированию, xll-job-admin
Язык кода:txt
копировать
1. Установить время
2. Кластер, используемая стратегия
3. При создании задачи будет указано имя и адрес задачи. 
xxl-job-excutor, обычно наша бизнес-система
Язык кода:txt
копировать
1. Адрес системы диспетчеризации на Конфигурация 
2. Создайте задачу и укажите имя задачи на задаче

Построить диспетчерский центр

Скачать исходный код
Язык кода:txt
копировать
1. https://github.com/xuxueli/xxl-job/releases/tag/2.3.0
Выполнить SQL
Язык кода:txt
копировать
1. /xxl-job-2.3.0/doc/db/tables_xxl_job.sql
2. Выполните файл sql для создания базы данных
Измените конфигурацию application.properties в проекте xxl-job-admin.
image.png
image.png
Перейдите в каталог xxl-job-admin и упакуйте его.
Язык кода:txt
копировать
1. mvn clean -U package -Dmaven.test.skip=true
Перейдите в целевой каталог и запустите
Язык кода:txt
копировать
1. java -jar xxl-job-admin-2.3.0.jar --server.port=8088
Язык кода:txt
копировать
2. http://localhost:8088/xxl-job-admin/toLogin
	
Язык кода:txt
копировать
3. Имя пользователя и пароль
	admin
	123456
4. Основной интерфейс
2. Интерфейс входа в систему
2. Интерфейс входа в систему
3. Основной интерфейс
3. Основной интерфейс
Планирование процесса выполнения задач
Язык кода:txt
копировать
1. Запустите модуль планирования xll-job-admin и запустите его напрямую.
2. xxl-job-excuotr нужен адрес Конфигурацияxxl-job-admin и активно зарегистрируйтесь в Xxl-job-admin.
3. блок-схема
image.png
image.png

Работа привода

Создать проект Springboot
image.png
image.png
Импортировать зависимости
Язык кода:java
копировать
<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>
Добавить файл конфигурации
image.png
image.png
Другие ссылки на конфигурацию
image.png
image.png
Конфигурация
Язык кода:java
копировать
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
Создать класс конфигурации
Язык кода:java
копировать
@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;
    }
}

Создание исполнителей и задач в диспетчерском центре

Создать исполнителя в управлении исполнителями
image.png
image.png
Язык кода:txt
копировать
1. Имя исполнителя должно совпадать с именем файла конфигурации. Названия приложений одинаковы
image.png
image.png
Перейдите в управление задачами и создайте задачи
image.png
image.png
Создать сопоставление задач
image.png
image.png
Запустить проект – запустить задачу
Зарегистрируйтесь в исполнителе
image.png
image.png
image.png
image.png
Глядя на исполнителя, мы видим, что служба регистрируется во время выполнения.
image.png
image.png
Глядя на проект проекта, мы видим, что распределенная задача приступила к выполнению нашей программы.
image.png
image.png

стратегия пути

Язык кода:txt
копировать
1. Это балансировщик нагрузки
2. Когда есть только одно Планирование задачцентр, Когда имеется несколько исполнителей ,Планирование задача Центр хочет выбрать одного или нескольких исполнителей для выполнения задачи
Кластерное развертывание проектов
Язык кода:txt
копировать
1. Настройки разрешают параллельные запуски
2. Изменить порт yml — запустить
image.png
image.png
  1. Запустить успешно
image.png
image.png
  1. Вы можете видеть, что зарегистрированы два сервисных кластера.
    1. Мы видим, что 10000 — первый, поэтому планировщик будет вызываться в таком порядке.
      image.png
      image.png
Подробное объяснение стратегии
image.png
image.png
Общее использование аварийного переключения
Язык кода:txt
копировать
1. Изменение планировщика управления задачами при отказе
2. Когда машина сломалась, Перейдите на другую машину
image.png
image.png
Запустите несколько служб и зарегистрируйте их для исполнителя.
image.png
image.png
Запустить задачу, чтобы проверить отработку отказа
image.png
image.png
После выполнения мы можем найти
Язык кода:txt
копировать
1. Доступ в порядке, который мы зарегистрировали у исполнителя
2. Остановим первый сервер (простой)
image.png
image.png
После простоя (10001) мы видим, что получено 9999?
Язык кода:txt
копировать
2. После простоя (10001) xxl-job отправит контрольный сигнал, чтобы проверить, можно ли его вызвать. Если запрос не может быть выполнен, xxl-job продолжит выполнение по порядку, а затем наступит очередь 9999. для выполнения операций планирования задач
image.png
image.png
Пример диаграммы-журнала --
image.png
image.png
Стратегия шардинга
Язык кода:txt
копировать
1. Получить индекс текущего сервиса: XxlJobHelper.getShardIndex();
2. Получите общее количество регистраций исполнителей: XxlJobHelper.getShardTotal();
3. Измените политику маршрутизации задач на: фрагментированная трансляция
4. Запустите 3 службы (потому что я обнаружил, что при запуске нескольких служб у одной из них всегда есть таймаут запроса, поэтому, если мы хотим использовать 2, просто запустите еще одну. Официальное решение этой ошибки пока не предоставлено.)
5. Начать просмотр задачифрагментированная трансляция-Задачи были отправлены в два сервиса соответственно.
image.png
image.png
Язык кода:java
копировать
 @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;
        }
Задание № 1-4-7 раздается
image.png
image.png
Остальное отдано другим службам.
image.png
image.png

Мы только что упомянули, что существует множество стратегий маршрутизации, но обычно используются эти две.

наконец

Этот вопрос исчерпан. Увидимся в следующий раз👋~

🌊 Подпишитесь на меня, чтобы не потеряться. Если эта статья вам полезна или у вас есть какие-либо вопросы, оставьте сообщение в области комментариев, я обычно отвечу, когда увижу ее. Пожалуйста, поставьте лайк и поддержите~ 💗

я участвуюНа втором этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будут отмечены призовые эссе, которые разделят призовой фонд в 10 000 юаней и часы с клавиатурой.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.