Работа с очередями курьеров для балансировки загрузки
Последовательность вызовов для настройки и использования очередей для равномерного распределения заказов между курьерами.
-
Регистрация курьера (для каждого курьера):
POST /api/integration/v1/couriers/courier/store -
Создание смен (для каждого курьера). Статус смены:
planned:POST /api/integration/v1/couriers/shift/store -
Начало смен. Статус смены:
ongoing. Курьеры автоматически добавляются в очередь региона:POST /api/integration/v1/couriers/shift/event-handler/shift_updated (для каждого курьера) -
Создание заказа (для каждого заказа):
POST /api/integration/v1/orders/order/store -
Первое построение маршрутов:
POST /api/integration/v1/routes/build-routesСервис выбирает курьеров из начала очереди. Курьеры, которые получили заказы, отправляются в конец очереди после их выполнения.
-
Принятие маршрута (для каждого маршрута):
POST /api/integration/v1/routes/route/accept -
Второе построение маршрутов (через некоторое время, когда появились новые заказы):
POST /api/integration/v1/routes/build-routesТеперь сервис выберет курьеров, которые не получали заказы в первое построение маршрутов (они в начале очереди) — это обеспечивает балансировку загрузки.
Пример балансировки:
-
начальная очередь:
courier-1 (rank: 100) — свободен courier-2 (rank: 101) — свободен courier-3 (rank: 102) — свободен -
очередь после первого построения маршрутов:
courier-3 (rank: 102) — свободен (не получил заказы) courier-1 (rank: 103) — занят (получил заказы, отправлен в конец) courier-2 (rank: 104) — занят (получил заказы, отправлен в конец) -
очередь после второго построения маршрутов:
courier-1 (rank: 103) — занят courier-2 (rank: 104) — занят courier-3 (rank: 105) — занят (только что получил заказы)
В итоге сервис обеспечивает справедливое распределение — каждый курьер получает заказы по очереди.