xxl-job подробное руководство по использованию

Java

Новое описание задачи

Эта статья продолжает вышеизложенноеxxl-job Краткое руководство, В прошлый раз я кратко рассказал о происхождении и использовании xxl-job. В этой статье будут подробно представлены некоторые расширенные методы и функции использования.

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

стратегия маршрутизации

Стратегия маршрутизации означает, что задача может быть выполнена несколькими исполнителями. Какой из них выполнить, зависит от стратегии маршрутизации, которую мы указываем.这个参数当执行器做集群部署的时候才有意义。

В Quartz доступны только случайные загрузки.

Тогда первый и последний здесь в каком порядке, то есть нажмите для просмотра - 1, 2, 3, 4 в узле регистрации, первый относится к 1, а последний относится к 4.

рабочий режим

Есть два режима работы, один - БОБ, а другой - КЛЕЙ.

  • Режим BEAN: Это написать класс Java в проекте, а затем заполнить имя в @XxlJob в JobHandler, которое написано на стороне исполнителя
  • Режим GLUE: поддерживает Java, Shell, Python, PHP, Nodejs, PowerShell, в это время код напрямую поддерживается в диспетчерском центре.

Я создал новую задачу в режиме GLUE (Java), нажмите на GLUE IDE в операцииЗдесь мы можем редактировать код, который хотим выполнить.Однако на этом пути будет риск безопасности.Без аутентификации способ очень простой.Вам нужно только добавить один и тот же токен в application.properties диспетчерского центра и исполнителя.

xxl.job.accessToken=

Стратегия обработки блокировки

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

Есть три варианта, как показано ниже:

Подзадачи

Когда мы хотим написать работу, задачи взаимозависимы. Например, я должен сделать так много вещей ниже, А сделано и Б сделано, Б сделано и С сделано, С сделано и Г сделано.Есть два подхода к этой проблеме. Во-первых, написать так много логики в одну большую работу и сериализовать ее. Второй — использовать подзадачи для запуска другой задачи в конце одной задачи.

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

тайм-аут задачи

Тайм-аут означает, что если результат не будет возвращен в течение указанного времени, он не будет ждать результата.

Расширенное использование задач

Шардинг задач

Предположим, у нас есть задача, которой нужно обработать 200 000 единиц данных, и обработка бизнес-логикой каждой части данных занимает 0,1 секунды, для обычной задачи с одним потоком требуется 5,5 часов для ее обработки. В это время, если вы хотите увеличить скорость, ваша первая реакция, чтобы открыть многопоточный запуск.Я открыл 3, и это заняло около часа.Ваша мысль полностью правильная!

На данный момент будет следующая ситуация: на исполнителе 0 усердно работают три потока, но как вы думаете, это хорошо? Нехорошо, мой актуатор 0 выдохся здесь, ваш актуатор 1 и актуатор 2 отдыхают там, засуха умрет, паводок умрет.Во-первых, это проблема неравномерного распределения. Во-вторых, при работе трех потоков экзекьютора 0 он будет тратить свои ресурсы, да и производительность этого сервера тоже снизится, так что это плохой способ.

В это время будет использоваться наша задача шардинга.Настоящее хорошее решение заключается в следующем, которое является научным и разумным решением. Каждый из трех исполнителей запускает потокобщийВыполните эту миссию! В это время есть проблема.Все на трех машинах выполняют один и тот же кусок кода.Разве это не беспорядок?Вы выполняете эти данные один раз,я выполняю еще раз,и он снова выполняет.Решение очень простое.Один исполнитель выполняет 1/3 от общего количества задач.Вы делите работу которую нужно сделать поровну?Я делаю 1/3, вы делаете 1/3, он делает 1/3, а не получится.конфликт.

Когда выполняется задача сегментирования, планировщик отправляет каждому исполнителю свой порядковый номер сегмента. Максимальный порядковый номер сегмента равен общему количеству исполнителей, чтобы гарантировать, что каждый исполнитель будет выполнять эту задачу. Например, первый исполнитель на приведенном выше рисунке получает сегмент номер 0, второй исполнитель получает сегмент номер 1, а третий исполнитель получает сегмент номер 2. Теперь с этим легко справиться.Нам нужно только взять остаток по модулю 3 обработанных данных, данные с остатком 0 обрабатываются исполнителем 0, данные с остатком 1 обрабатываются исполнителем 1, а данные с остатком 2 обрабатываются исполнителем 1. Просушить исполнительным механизмом 2.

sql, который мы получаем, можно записать так:

//count分片总数,index当前分片数
select id,name,password from student where status=0 and mod(id,#{count})=#{index} order by id desc limit 1000;

Реализовать это в кодеПри создании новой задачи выберите широковещательную рассылку шардов и заполните соответствующий JobHandler.Наконец, следует отметить, что объем данных в сегменте не обязательно完全均等объем данных,Приведенный выше модуль - это просто пример, идея. Мы также можем заменить 0, 1 и 2 другими условиями, чтобы получить некоторые данные из всех данных, например, для машины с номером шарда 0 я проверяю данные в 2018 году, а для машины с номером шарда 1 я проверяю данные за 2019 год. Для машины с серийным номером 2 я проверю данные за 2020 год. Как разделить это зависит от нашего бизнеса, чтобы выбрать.

Если узлы добавляются или удаляются, общее количество осколков и максимальное количество осколков будут меняться в режиме реального времени.

командная задача

Командные задачи более полезны.Например, нам нужно регулярно перезапускать базу данных (перезапуск службы), регулярно создавать резервные копии файлов данных (cp tar rm) и регулярно очищать журналы (rm).

Использование командной строки тоже очень простое, нужно только передать в качестве параметра исполняемую команду.Теперь давайте создадим новую задачу командной строкиЗапустите задание, каждые 5 секунд автоматически будет всплывать калькулятор

Периодическая задача

Периодическая задача заключается в выполнении пользовательского метода при запуске и уничтожении задачи и выполнении того, что вы хотите сделать.

Суммировать

Друзья, на этом два урока по xxl-job подходят к концу, и наконец я подведу итоги.

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

Отвечает за управление информацией о планировании, отправку запросов на планирование в соответствии с конфигурацией планирования и не несет ответственности за бизнес-коды. Системы планирования и задачи解耦, что повышает доступность и стабильность системы, а планирование производительности системы больше не ограничивается модулями задач;

Поддержка диспетчерского центра可视化, Простое и динамичное управление информацией о расписании, включая создание, обновление, удаление задач, разработку GLUE и задачи.报警д., все вышеперечисленные операции будут выполняться в режиме реального времени, поддерживая监控Планирование результатов и журналов выполнения, поддержка отказоустойчивости исполнителя.

Центр планирования поместит запрос на планирование в очередь асинхронного планирования.Теоретически одна машина центра планирования в конфигурации по умолчанию может поддерживать 5000 задач одновременно и стабильно работать.Однако из-за задержки в сети, различное время чтения и записи БД , и различной интенсивности планирования задач, Это приведет к тому, что верхний предел объема задачи будет колебаться вверх и вниз.Если вам нужно поддерживать больше задач, вы можете увеличить количество потоков планирования, уменьшить задержку проверки связи между центром планирования и исполнителем и улучшить конфигурацию машины.

xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

Актуатор

Отвечает за получение запросов на планирование и выполнение логики задач, модуль задач专注于任务的执行и другие операции, разработка и обслуживание проще и эффективнее;

Получайте запросы на выполнение, запросы на завершение и запросы на регистрацию из диспетчерского центра.

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