Кластеризованный (несколько экземпляров) кварцевый планировщик Interrupt API не работает эффективно

У меня есть кластерный кварцевый планировщик (3 запущенных экземпляра Java, ссылающихся на одну и ту же БД, где присутствуют кварцевые таблицы). Ниже то, что у меня есть в моем файле свойств кварца. org.quartz.scheduler.instanceId = AUTO org.quartz.jobStore.isClustered = true

ниже код java

import org.quartz.JobKey;
import org.quartz.Scheduler;
boolean interruptResult = scheduler.interrupt(new JobKey(jobName,groupName));

Вариант использования: Дело 1 : Задания выполняются в экземпляре «A» и когда запрос на прерывание поступает в экземпляр «B», он не может прерваться, и interruptResult становится ложным.

Случай 2: Задания выполняются в экземпляре «А» и когда запрос на прерывание приходит к экземпляру «А», он отлично выполняет свою работу, прерывая работу.

Кто-нибудь может мне помочь ? Мне не хватает дополнительной конфигурации для установки с несколькими экземплярами (кластерами)?

Спасибо заранее !!!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 443
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Так работает Кварц. Когда вы думаете об этом, кластер Quartz — это «просто» набор автономных экземпляров Quartz, которые используют одно и то же хранилище заданий JDBC. Экземпляры Quartz могут приходить и уходить когда угодно, и им не нужно регистрироваться/отменять регистрацию, нет центрального узла, который бы отслеживал текущую топологию кластера и координировал выполнение запланированных заданий.

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

Для реализации варианта использования вам необходимо:

  1. Переберите все ваши кластеризованные планировщики Quartz и планировщик запросов, чтобы получить список всех текущих заданий, выполняемых в этом конкретном экземпляре планировщика.

  2. Найдите экземпляр планировщика Quartz, который в данный момент выполняет ваше задание.

  3. Вызовите операцию прерывания для найденного экземпляра планировщика Quartz.

Поскольку вам придется выполнять удаленные вызовы, вы не можете использовать локальный Quartz API. Я рекомендую использовать Quartz JMX API для этой работы, или вы можете использовать Quartz RMI API. Оба довольно просты в использовании, и в Google должно быть достаточно примеров.

Я изо всех сил пытаюсь реализовать это, можете ли вы указать мне какой-либо пример Quartz JMX API о том, как реализовать ваше предложение?

puclanac 01.03.2023 10:52

@puclanac Сначала вам нужно заставить планировщики Quartz экспортировать (зарегистрировать) свои MBean-компоненты в реестр MBean-компонентов JVM. Это достигается добавлением org.quartz.scheduler.jmx.export = true в вашquartz.properties. Затем вам нужно будет включить удаленный доступ к серверу MBean JVM, добавив несколько свойств sys в командную строку JVM планировщика Quartz. Вы можете найти список в главе 3.1 в этом документе: quardesk.com/downloads/documents/howto/… . Затем вам нужно реализовать приложение с описанной выше логикой.

Jan Moravec 01.03.2023 16:01

Чтобы удаленно подключиться к серверу JMX, получить справочник Quartz MBean и вызвать на нем методы, вам потребуется изучить API-интерфейсы Java JMX, просмотреть несколько примеров и поиграть. Это интерфейс Quartz MBean, который вы хотите получить из реестра, и чьи методы (getCurrentlyExecutingJobs, interruptJob) вам нужно будет вызвать: jmx/… .

Jan Moravec 01.03.2023 16:06

Другие вопросы по теме