предисловие
Привет всем, меня зовут Джек Сю. Сегодня я хотел бы поделиться с вами 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/Сюэли Сюй/Спасибо...