BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

Обзор очередей — IO7 Framework

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • Обзор
  • Архитектура
  • Зависимости
  • Конфигурация (.env)
  • Быстрый старт
    • Инициализация
    • Публикация сообщения
    • Потребление сообщений
    • Non-blocking получение
    • Отложенное сообщение
    • RPC-запрос
  • Сценарии использования
    • Очередь задач
    • Очередь с задержкой
    • RPC для синхронных вызовов
  • CLI команды
  • См. также

Обзор

IO7 предоставляет интеграцию с RabbitMQ для организации асинхронной обработки задач. Менеджер очередей поддерживает публикацию/потребление сообщений, отложенные сообщения, RPC-запросы иdead-letter exchange.

Архитектура

IO\Queue\RabbitMQManager   — Менеджер RabbitMQ (singleton)
  ├── publish()             — Публикация сообщений
  ├── publishDelayed()      — Отложенные сообщения (dead-letter exchange)
  ├── consume()             — Блокирующее потребление
  ├── get()                 — Non-blocking получение
  ├── rpcClient()           — RPC-клиент
  ├── rpcServer()           — RPC-сервер
  └── close()               — Закрытие соединения

Зависимости

{
    "php-amqplib/php-amqplib": "^3.7"
}

Конфигурация (.env)

RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/

Быстрый старт

Инициализация

\RabbitMQManager::init([
    'host' => 'localhost',
    'port' => 5672,
    'user' => 'guest',
    'password' => 'guest',
    'vhost' => '/',
]);

Публикация сообщения

\RabbitMQManager::getInstance()->publish('orders', [
    'order_id' => 123,
    'status' => 'new',
]);

Потребление сообщений

\RabbitMQManager::getInstance()->consume('orders', function (array $data): bool {
    echo "Получен заказ: " . $data['order_id'];
    return true;
});

Non-blocking получение

$message = \RabbitMQManager::getInstance()->get('notifications');
if ($message !== null) {
    echo $message['text'];
}

Отложенное сообщение

\RabbitMQManager::getInstance()->publishDelayed('tasks', [
    'job' => 'cleanup'
], 10000);

RPC-запрос

$result = \RabbitMQManager::getInstance()->rpcClient('math_queue', [
    'operation' => 'add',
    'a' => 2,
    'b' => 3,
], 10);

Сценарии использования

Очередь задач

// Producer
\RabbitMQManager::getInstance()->publish('email_queue', [
    'to' => 'user@example.com',
    'subject' => 'Welcome',
    'body' => 'Hello!',
]);

// Consumer (отдельный процесс)
\RabbitMQManager::getInstance()->consume('email_queue', function (array $data): bool {
    sendEmail($data['to'], $data['subject'], $data['body']);
    return true;
});

Очередь с задержкой

\RabbitMQManager::getInstance()->publishDelayed('reminders', [
    'user_id' => 123,
    'message' => 'Не забудьте оплатить',
], 3600000);

RPC для синхронных вызовов

// Сервер (отдельный процесс)
\RabbitMQManager::getInstance()->rpcServer('math_queue', function (array $request): array {
    return ['result' => $request['a'] + $request['b']];
});

// Клиент
$result = \RabbitMQManager::getInstance()->rpcClient('math_queue', [
    'operation' => 'add',
    'a' => 2,
    'b' => 3,
]);

CLI команды

# Запуск воркера очереди
php iocli queue:work

# Прослушивание очереди
php iocli queue:listen

# Retry failed jobs
php iocli queue:retry

# Show failed jobs
php iocli queue:failed

# Restart workers
php iocli queue:restart

См. также

  • RabbitMQ
Next
RabbitMQ