Перейти до вмісту

Черги для контролю вихідного трафіку (Target Queues)

Система асинхронних вихідних черг захищає цільові системи (CMS, ERP, інтернет-магазини на кшталт Shopify, WooCommerce, 1C ERP та фінансові бекенди) від перевантажень і падінь під час пікових сплесків трафіку.

Замість того, щоб блокувати клієнтів або перевантажувати downstream-системи сотнями одночасних API-викликів, шлюз розподіляє процес на три етапи:

  1. Миттєвий розвантажувальний response Шлюз перехоплює запити на зміну даних (усі мутаційні запити, крім GET), зберігає їх у чергу та одразу повертає клієнту статус відповіді:
    HTTP/1.1 202 Accepted
    Клієнт не чекає обробки та не отримує помилок за таймаутом.
  2. Дозована передача (Throttling) Запити з черги надсилаються до цільової системи із суворо контрольованою швидкістю (RPS), яку здатен безперебійно витримати її бекенд.
  3. Гарантія доставки Жоден запит не втрачається, навіть якщо цільова система тимчасово уповільнилась або недоступна.

Тарифні ліміти та контроль доступу

Section titled “Тарифні ліміти та контроль доступу”

Доступність та ліміти черг залежать від вашого активного тарифного плану:

Тарифний планДозволені активні чергиПоведінка перехоплення черги
Free0Створення черги заблоковано (403 Forbidden). Перехоплення чергою пропускається; запити виконуються напряму.
Developer1До 1 активної черги обмеження вихідної швидкості.
Business & EnterpriseДо 5До 5 активних черг обмеження вихідної швидкості.

Параметри конфігурації

Section titled “Параметри конфігурації”

Клієнти можуть налаштовувати та керувати цільовими чергами безпосередньо через дашборд (Dashboard UI).

ПараметрТипВалідація / ОбмеженняОпис
nameString1–100 символівЛюдиночитана назва черги (наприклад, ERP Orders Queue).
target_domainStringДійсний доменЦільовий хост-домен для збігу (наприклад, api.mysite.com).
max_rate_rpsIntegerвід 1 до 50 RPSМаксимальний ліміт швидкості вихідної відправки за секунду.
max_queue_sizeIntegerвід 100 до 10,000Максимальна кількість очікуючих запитів у буфері Redis.
message_ttl_secondsIntegerвід 300с (5хв) до 10,800с (3год)Час життя (TTL) перед тим, як необроблені завдання закінчать термін дії.
notify_on_failureBooleantrue / falseУвімкнути сповіщення Dead-Letter Webhook при скиданні/закінченні TTL/помилці.
webhook_urlStringДійсний HTTP/HTTPS URLURL-адреса слухача для сповіщень про скидання з черги Dead-Letter Queue (DLQ).

Життєвий цикл обробки запиту

Section titled “Життєвий цикл обробки запиту”
[Запит клієнта]
┌───────────────────────────────┐
│ Перевірка аутентифікації/плану│
└──────────────┬────────────────┘
Платний план (Dev/Biz)?
├── Ні (Free) ───────► Обхід черги (Пряме виконання проксі)
└── Так
Метод != GET та черга активна?
├── Ні (GET / Пауза) ──► Обхід черги (Пряме виконання проксі)
└── Так
┌──────────────▼────────────────┐
│ Додавання в Redis-буфер │
│ Негайний 202 Accepted (<2ms) │
└──────────────┬────────────────┘
┌───────────────────────────────┐
│ Outbound Rate Limiter Worker │ (Atomic Redis SetNX Lock Window = 1000ms / RPS)
└──────────────┬────────────────┘
┌───────────────────────────────┐
│ Виконання downstream-проксі │ (Зберігає X-Retry-Count, X-Proxy-Timeout тощо)
└──────────────┬────────────────┘
┌───────┴───────┐
▼ ▼
[200 OK Відповідь] [5xx / TTL Завершено]
│ │
Запис метрики доступності Виклик Dead-Letter Webhook (якщо увімкнено)

Ключові правила виконання

Section titled “Ключові правила виконання”
  1. GET-запити: Завжди обходять цільові черги та виконуються напряму через стандартний пайплайн проксі.
  2. Стан паузи (is_active = false): У стані паузи перехоплення чергою вимикається, і запити проходять напряму до цільових систем.
  3. Збереження надійності: Завдання в черзі зберігають усі оригінальні заголовки надійності (X-Retry-Count, X-Proxy-Timeout, X-Smart-Cache, X-Failover-URL).
  4. Dead-Letter Webhook: При переповненні черги, закінченні TTL або збої upstream надсилається POST-сповіщення на webhook_url, якщо notify_on_failure має значення true.

1. Додавання висококонкурентного POST-запиту в чергу

Section titled “1. Додавання висококонкурентного POST-запиту в чергу”
Terminal window
curl --location 'https://proxy.mirapi.io/' \
--header 'X-MirApi-Key: your_api_key_here' \
--header 'X-Target-URL: https://api.mysite.com/v1/orders' \
--header 'X-Retry-Count: 3' \
--header 'X-Proxy-Timeout: 15s' \
--header 'Content-Type: application/json' \
--data '{
"order_id": "ORD-99214",
"customer": "John Doe",
"amount": 149.99
}'

Синхронна відповідь (< 2 мс):

Section titled “Синхронна відповідь (< 2 мс):”
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"status": "queued",
"job_id": "1c7f8499-66dc-4689-99ff-f74837afa5ee",
"queue_id": "52f00232-78b0-465b-a6ec-5103459b8a16",
"target_domain": "api.mysite.com",
"message": "Request queued for rate-throttled outbound execution"
}

2. Режим URL Query Parameters (для Shopify / Сторонніх вебхуків)

Section titled “2. Режим URL Query Parameters (для Shopify / Сторонніх вебхуків)”

Якщо ваш постачальник вебхуків не дозволяє налаштовувати кастомні HTTP-заголовки, передавайте прапорці оркестрації через URL query parameters:

Terminal window
curl --location 'https://proxy.mirapi.io/?apiKey=your_api_key_here&target=https://api.mysite.com/v1/orders&retry_count=3&timeout=15s' \
--header 'Content-Type: application/json' \
--data '{"order_id": "ORD-1002"}'

3. Пейлоад сповіщення Dead-Letter Queue (DLQ)

Section titled “3. Пейлоад сповіщення Dead-Letter Queue (DLQ)”

Коли завдання в черзі зазнає невдачі після всіх повторів або закінчується його час життя (TTL), шлюз надсилає сповіщення на ваш налаштований webhook_url:

POST /webhooks/dlq HTTP/1.1
Host: mycrm.com
Content-Type: application/json
{
"job_id": "1c7f8499-66dc-4689-99ff-f74837afa5ee",
"queue_id": "52f00232-78b0-465b-a6ec-5103459b8a16",
"user_id": "8a852528-d79d-4da5-8e12-89b9fbde8554",
"target_url": "https://api.mysite.com/v1/orders",
"target_domain": "api.mysite.com",
"reason": "upstream_failure",
"error_message": "upstream returned status code: 500",
"created_at": "2026-08-02T21:08:35Z",
"failed_at": "2026-08-02T21:08:37Z"
}