xxl-job краткое руководство по началу работы

Java

предисловие

Привет всем, меня зовут Джек Сю. Сегодня я хотел бы поделиться с вами xxl-job. xxl — это аббревиатура от имени Сюй Сюэли. Он программист Dianping и системы планирования задач с открытым исходным кодом, созданной в свободное время. В дополнение к xxl-job автор открыл исходный код многих других компонентов, и теперь существует в общей сложности 11 проектов с открытым исходным кодом, образующих семейство xxl. На данный момент существуют сотни компаний, которые зарегистрировались и использовали официальный сайт xxl-job.На самом деле, многие из них не зарегистрированы, поэтому на самом деле их используют гораздо больше, чем эти сотни компаний.Последняя версия это: 2.2.0.

Недостатки кварца

Прежде чем представить xxl-job, давайте представим Quartz. Quartz имеет почти 20-летнюю историю. Модель планирования очень зрелая, и ее легко интегрировать в Spring. Это хороший выбор для выполнения бизнеса. Но он также сталкивается с некоторыми проблемами, такими как:

1. Логика планирования (Планировщик) и класс задач объединены в одном проекте.По мере постепенного увеличения количества задач планирования и постепенного увеличения логики задач планирования общая производительность системы планирования будет сильно затронута;

2.Результаты нагрузки между нодами кластера Quartz случайны.Кто захватит блокировку базы данных, тот и выполнит задачу.Это может привести к гибели засухи и наводнения, а производительность машины не может быть напряжённой.

3. Сам Quartz не предоставляет функции динамического планирования и интерфейса управления, нужно разрабатывать его по API.

4, регистрация Quartz, статистика, мониторинг не особенно совершенны.

Как xxl-job, так и elastic-job инкапсулируют Quartz и решают вышеуказанные проблемы, делая его более простым в использовании и более мощным.

xxl-функции работы

По сравнению со старым Quartz, xxl-job имеет больше функций. В целом его можно разделить на три категории:

1. Повышение производительности: можно запланировать больше задач.

2. Повышение надежности: обработка тайм-аута задачи, сбоя и отработки отказа.

3. Эксплуатация и обслуживание более удобны: предоставить рабочий интерфейс, иметь права пользователя, подробные журналы, предоставить конфигурацию уведомлений, автоматически создавать отчеты и т. д.

xxl-архитектура задания

Ниже приведена схема архитектуры официального сайта xxl-job.Последнюю не нашел.Это схема версии 2.1.0,но она не так уж и плоха.Собственный RPC(xxl-rpc) отмечен в красное поле в правом нижнем углу находится в версии 2.2.0.Заменено методом HTTP-запроса в спокойном стиле.Я упростил приведенную выше схему, планировщик и бизнес-исполнение xxl-job независимы. Планировщик определяет расписание задач и вызывает интерфейс исполнителя для выполнения задач через http.

установить xxl-работу

Скачать исходный код

ссылка для скачивания:GitHub.com/Сюэли Сюй/Спасибо... 注意Не клонируйте последний основной код ветки, мастер находится в разработке, вам следует нажать «Релизы», чтобы перейти на страницу выпуска, чтобы загрузить стабильную версию (2.2.0).Загруженный исходный код выглядит следующим образом:

  • doc: Документация, включая скрипт построения таблицы "База данных планирования"
  • xxl-job-core: общедоступные зависимости Jar
  • xxl-job-admin: центр планирования, исходный код проекта, проект весенней загрузки, можно запустить напрямую
  • xxl-job-executor-samples: исполнитель, образец примера проекта, в котором можно напрямую запустить проект весенней загрузки. Вы можете разработать этот проект или модифицировать существующий проект для создания проекта-исполнителя.

Инициализировать базу данных

Скрипты базы данных в каталоге doc/db:Выполните этот sql локально.После выполнения будет сгенерировано 8 таблиц.Их функции следующие:

Имя таблицы эффект
xxl_job_group Информационный лист об исполнителе: информация об исполнителе задач обслуживания
xxl_job_info Таблица расширенной информации о планировании: используется для сохранения расширенной информации о задачах планирования xxl-заданий, таких как группировка задач, имя задачи, адрес машины, исполнитель, входные параметры выполнения и электронные сообщения о тревогах и т. д.
xxl_job_lock таблица блокировки планирования задач
xxl_job_log Таблица журнала планирования: используется для сохранения исторической информации задач планирования XXL-задания, таких как результаты планирования, результаты выполнения, параметры ввода планирования, планирование машин и исполнителей и т. Д.
xxl_job_log_report Отчет журнала планирования: пользователь сохраняет отчет журнала планирования задач xxl-job, который будет использоваться на странице функции отчета центра планирования.
xxl_job_logglue Журнал задач GLUE: используется для сохранения истории обновлений GLUE, используется для поддержки функции возврата версии GLUE.
xxl_job_registry Реестр исполнителей, поддерживает онлайн-информацию об адресах исполнителей и диспетчерского центра.
xxl_job_user системная пользовательская таблица

Установить диспетчерский центр

Выше была представлена ​​система архитектуры xxl-job, которая разделена на центр планирования и исполнитель. Загруженный исходный код соединяет их вместе. Проекты администратора и исполнителя можно копировать отдельно (два проекта весенней загрузки), изменить. файл пом. Фактически, это должен быть независимый проект при разработке и запуске.

Мы xxl-job-admin единственную копию проекта вне

xxl-job-core должен быть указан в файле pom.

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

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Явно добавить пароль учетной записи для входа в диспетчерский центр

xxl.job.login.username=admin
xxl.job.login.password=123456

Хорошо, тогда запустите проект, проект загрузки spirng должен быть запущен всеми, введите пароль учетной записи, установленный вамиВойдите, и все готово!Чтобы обеспечить доступность, диспетчерский центр можно использовать для развертывания кластера, при этом необходимо выполнить несколько условий:

  • Подключиться к той же базе данных
  • Часы машин кластера остаются прежними (игнорируются для кластеров с одной машиной).
  • Рекомендуется осуществлять доступ через доменное имя и использовать Nginx для балансировки нагрузки. Доступ к интерфейсу управления, регистрация привода, все используют доменное имя.

Создать исполнителя

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

В xxl-job-executor-samples исходного кода есть 6 демонстраций выполнения, в которых рассказывается, как создавать исполнители в некоторых основных фреймворках, даже без фреймворков. Исполнитель может быть как отдельным проектом, так и интегрированным в бизнес-проект (запускается еще один порт), поэтому есть еще одно название — бизнес-экземпляр.

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

Также измените конфигурационный файл application.properties, основные изменения заключаются в следующем:

### 注册到调度中心
xxl.job.admin.addresses=http://127.0.0.1:7391/xxl-job-admin
### 日志存放路径
xxl.job.executor.logpath=D:/xxl-job/jobhandler
### 因为我们要模拟执行器集群部署,打包后单击运行多次,为服务设置随机端口
server.port=${random.int[10000,19999]}
### 执行器的端口
xxl.job.executor.port=${random.int[9000,10000]}
### 集群部署,这两项配置要一致
xxl.job.executor.appname=xxl-job-executor-jackxu
xxl.job.executor.address=

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

тест xxl-работа

Пока xxl-job установлен, давайте создадим задачу для его тестирования.

Создать задачу

Здесь я создал новый SimpleJobHandlerЕсть несколько вещей, которые нужно помнить при создании новой задачи:

1. В экземпляре Spring Bean (аннотация (@Component) разработайте метод Job. Формат метода должен быть «public ReturnT demoJobHandler (String param)», возвращаемое значение и формат параметра фиксированы, это нельзя переместить, единственное, что можно переместить, — это имя метода.

2. Аннотировать имя метода @XxlJob.Есть несколько атрибутов.Первое значение соответствует новой задаче центра планирования.JobHandlerСтоимость имущества. Другой init соответствует методу инициализации JobHandler, а destroy соответствует методу уничтожения JobHandler. Эти два метода должны быть созданы в классе задач.

3. Журнал выполнения: Вам необходимо распечатать журнал выполнения через "XxlJobLogger.log", который будет записан в указанный файл журнала.

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

Задачи конфигурации

Настраиваем код, написанный на центре планирования, в управлении задачами - добавляем, есть какие-то опции, все не знают, что это значит, это неважно, потом я напишу статью, чтобы представить функцию фрагментации задачи .Давайте сначала настроим его по моей конфигурации.Нажмите, чтобы начатьОткрой папку и посмотри.Путь тот что я настроил в application.properties.Задача 5 раз написать hello word в лог.На этом все готово. Я считаю, что вы освоили краткое руководство по началу работы с xxl-job. Вы можете следовать моему руководству, чтобы сделать это снова. Позже я напишу еще одну статью о расширенных функциях xxl-job.Нелегко быть оригинальным, если вы считаете, что это хорошо, пожалуйста, поставьте лайк!

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

xxl-job официальный сайтwww.xuxueli.com/xxl-job/

загрузка кодаGitHub.com/Сюэли Сюй/Спасибо...