Работа с очередями курьеров для балансировки загрузки

Последовательность вызовов для настройки и использования очередей для равномерного распределения заказов между курьерами.

  1. Регистрация курьера (для каждого курьера):

    POST /api/integration/v1/couriers/courier/store
    
  2. Создание смен (для каждого курьера). Статус смены: planned:

    POST /api/integration/v1/couriers/shift/store
    
  3. Начало смен. Статус смены: ongoing. Курьеры автоматически добавляются в очередь региона:

    POST /api/integration/v1/couriers/shift/event-handler/shift_updated (для каждого курьера)
    
  4. Создание заказа (для каждого заказа):

    POST /api/integration/v1/orders/order/store
    
  5. Первое построение маршрутов:

    POST /api/integration/v1/routes/build-routes
    

    Сервис выбирает курьеров из начала очереди. Курьеры, которые получили заказы, отправляются в конец очереди после их выполнения.

  6. Принятие маршрута (для каждого маршрута):

    POST /api/integration/v1/routes/route/accept
    
  7. Второе построение маршрутов (через некоторое время, когда появились новые заказы):

    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) — занят (только что получил заказы)
    

В итоге сервис обеспечивает справедливое распределение — каждый курьер получает заказы по очереди.

Написать в службу поддержки