---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://yandex.kz/routing/doc/ru/oob/guidelines/queues.md
  - href: ru/oob/guidelines/queues.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
title: Яндекс Маршрутизация — экспресс-доставка — работа с очередями курьеров для балансировки загрузки
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.kz/routing/doc/ru/llms.txt


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

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

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

    ```
    POST /api/integration/v1/couriers/courier/store
    ```

1. Создание смен (для каждого курьера). Статус смены: `planned`:

    ```
    POST /api/integration/v1/couriers/shift/store
    ```

1. Начало смен. Статус смены: `ongoing`. Курьеры автоматически добавляются в очередь региона:

    ```
    POST /api/integration/v1/couriers/shift/event-handler/shift_updated (для каждого курьера)
    ```

1. Создание заказа (для каждого заказа):

    ```
    POST /api/integration/v1/orders/order/store
    ```

1. Первое построение маршрутов: 

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

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

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

    ```
    POST /api/integration/v1/routes/route/accept
    ```

1. Второе построение маршрутов (через некоторое время, когда появились новые заказы):

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

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

<!-- source: ru/oob/_includes/feedback.md -->
<a href="feedback">
  <span class="button">Написать в службу поддержки</span>
</a>


<!-- endsource: ru/oob/_includes/feedback.md -->
