I have a custom module handling jobs from the Advanced Queue module.
To limit the number of jobs allowed to be processed in one cron run, I have some configuration variables in my custom module. With an event listener my function gets called correctly, when the queue is processed.
How can I fetch the current running process of the queue and stop it?
public static function getSubscribedEvents() {
$events[AdvancedQueueEvents::PRE_PROCESS][] = ['checkLimits'];
return $events;
}
public function checkLimits(JobEvent $event) {
$job_type = $event->getJob()->getType();
if ($job_type === 'MYMODULE_send_reports') {
$config = \Drupal::configFactory()->getEditable('MYMODULE.settings');
if (!empty($config)) {
$number_of_max_emails_to_send_per_day = $config->get('number_of_max_emails_to_send_per_day');
$number_of_max_emails_to_send_per_hour = $config->get('number_of_max_emails_to_send_per_hour');
$remaining_emails_day = $config->get('remaining_emails_day');
$remaining_emails_hour = $config->get('remaining_emails_hour');
if ($remaining_emails_day <= 0) {
$queue = Queue::load($event->getJob()->getQueueId());
// $processor_id is only a string like "cron".
$processor_id = $queue->getProcessor();
}
}
}
}