Как отменить несколько заданий в очереди laravel для одной и той же задачи

У меня есть система терапевта, и каждый терапевт добавляет сеанс со своим временем, когда клиент заказывает сеанс, я запускаю queued job, чтобы напомнить клиенту и врачу.

  1. когда начинается сеанс
  2. до начала сеанса за 3 часа
  3. до начала сеанса за 1 час

вот пример моего кода

if($this->timeslot->last_charge_type == 'success'){
    dispatch(new SessionReminderJob($this->timeslot, $patient, $doctor))
            ->delay($this->timeslot->start_time->subHour());
    dispatch(new SessionReminderJob($this->timeslot, $patient, $doctor))
            ->delay($this->timeslot->start_time->subHours(3));
}

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

Я искал некоторые ответы здесь, но неэффективен для моего случая, подобного этому.

  1. вопрос 1
  2. еще один в laracasts

person Joseph    schedule 23.12.2020    source источник
comment
Это не та задача, которая подходит для очереди. Я бы рекомендовал использовать планировщик, чтобы запланировать одну задачу для сбора всех предстоящих встреч и отправки работа с немедленным эффектом. В качестве альтернативы вы можете проверить, находится ли время встречи в 1 или 3 часах как часть SessionReminderJob, и выбрать фактическое уведомление в этот момент, если оно все еще есть.   -  person apokryfos    schedule 24.12.2020
comment
@apokryfos я проверяю scheduler перед использованием queued jobs, но когда я пытаюсь, он должен работать каждые 5 минут, и это будет неэффективно, предположим, что в таблице сеансов около 1 миллиона строк, поэтому в этом случае вам нужно перебирать эти строки каждые 5 минут?   -  person Joseph    schedule 24.12.2020
comment
Простая фильтрация даты/времени запроса SQL должна быть эффективной при условии использования правильных индексов. 1 миллион строк или 1 миллиард строк здесь не должны иметь большого значения, если ваша система базы данных используется правильно. Кроме того (в худшем случае) вы можете иметь только активные сеансы (т.е. предстоящие сеансы) в таблице, дополнительно удаляя вещи в таблице, если это действительно проблема.   -  person apokryfos    schedule 24.12.2020
comment
в этом случае я должен добавить index в столбец start_time?   -  person Joseph    schedule 24.12.2020
comment
Да, это могло бы помочь, но наиболее полезно заполнить таблицу тестовыми данными и синхронизировать некоторые запросы и выполнить explain для самых медленных запросов, которые вы хотите оптимизировать, чтобы посмотреть, что еще можно сделать.   -  person apokryfos    schedule 24.12.2020
comment
большое спасибо за вашу помощь, сэр, это полезно   -  person Joseph    schedule 24.12.2020