Kafka + планирование на основе событий

Как вы справляетесь с автоматическим истечением срока действия заказов в статусе pending_payment в системе электронной коммерции на основе событий, использующей kafka?

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

Один из способов, который я могу придумать, - это запланировать задание cron через 30 минут, которое истечет срок действия определенного заказа и вернет количество элемента, но есть ли более эффективный способ сделать это? Возможно ли создание cron-задания для каждого заказа?




Ответы (2)


в kafka нет функции отложенной очереди. также нет способа «подключить» какое-либо удержание времени на стороне брокера (и также нет способа гарантировать, что обработка удержания времени происходит тогда, когда вы этого хотите - подумайте об этом как о сборке мусора).

поэтому общий ответ на ваш вопрос - вам понадобится какой-то планировщик.

person radai    schedule 22.07.2019

Вам нужен способ управлять состоянием - в зависимости от времени. Создание cron будет работать, но, возможно, будет сложно поддерживать, отслеживать и масштабировать, особенно если вам потребуется более одного сервера для их обработки.

Другое решение - использовать простой в использовании механизм рабочего процесса, такой как zenaton (я соучредитель). Обычно для каждого заказа вы запускаете простой рабочий процесс, написанный на вашем собственном языке программирования. Если в течение 30 минут этот рабочий процесс не получил «PaymentEvent», вы решаете связаться со службой инвентаризации, чтобы выпустить товары.

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

person Gilles Barbier    schedule 27.08.2019