For the complete documentation index, see llms.txt. This page is also available as Markdown.

Очереди и письма

В iEXExchanger отправка писем и часть системных задач может выполняться через очереди.

Очереди позволяют системе не выполнять тяжёлые операции сразу во время действия пользователя, а передавать их в фоновую обработку.

Например, клиент создаёт заявку, система быстро показывает результат, а письмо клиенту или администратору отправляется отдельно в фоне.

Важное уведомление о почтовом драйвере

iEXExchanger использует стандартный почтовый механизм Laravel Framework, который работает через Symfony Mailer.

Это официальный механизм Laravel для отправки писем через SMTP, Resend и другие почтовые службы.

Разработчики iEXExchanger не изменяют внутренний код почтового драйвера Laravel.

Поэтому если при настройке почты возникают ошибки соединения, авторизации, SSL/TLS, timeout, блокировка порта или отказ почтового сервиса, чаще всего причина находится не в коде системы, а в настройках почтовой службы, сервера, DNS или очередей.

Перед обращением в поддержку проверьте:

  • SMTP host;

  • SMTP port;

  • тип шифрования;

  • логин и пароль;

  • пароль приложения;

  • e-mail отправителя;

  • SPF, DKIM и DMARC;

  • доступность портов 465 и 587 на сервере;

  • ограничения почтового провайдера;

  • работу очередей, если письма отправляются не сразу.

Если сервер не может подключиться к SMTP-службе, обратитесь в поддержку хостинга или сервера и попросите проверить исходящие подключения к нужному SMTP-хосту и порту.

Что такое очередь

Очередь — это механизм фоновой обработки задач.

Он позволяет системе выполнять часть операций не сразу, а отдельно от основного действия пользователя.

Например, пользователь создал заявку.

Система может:

  • сразу создать заявку;

  • показать пользователю результат;

  • отправить письмо позже через очередь;

  • отправить Telegram-уведомление в фоне;

  • выполнить пересчёт, экспорт или другую тяжёлую задачу отдельно.

Это помогает не замедлять сайт и панель управления.


Для чего очереди используются в iEXExchanger

В iEXExchanger очереди могут использоваться для разных задач:

  • отправка e-mail уведомлений;

  • отправка Telegram-уведомлений;

  • уведомления безопасности;

  • подтверждение e-mail;

  • уведомления о новых заявках;

  • уведомления администраторам;

  • экспорт заявок;

  • архивирование заявок;

  • пересчёт заявок;

  • пересчёт уровней клиентов;

  • обработка медиафайлов;

  • аналитика;

  • webhooks;

  • фоновые задачи модулей.

Поэтому параметр QUEUE_DRIVER влияет не только на письма, а на всю систему фоновых задач.


Где настраивается QUEUE_DRIVER

Параметр очереди настраивается на сервере в .env файле Backend.

Обычно файл находится в директории Backend-проекта:

Файлы сайта в FastPanel

Пример:

или:

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

Эти действия должен выполнять специалист, который обслуживает сервер.

Какие QUEUE_DRIVER доступны

В проекте доступны стандартные драйверы очередей Laravel:

В обычной эксплуатации чаще всего используются:

Для рабочего production-сервера рекомендуется:

Для диагностики или простого сервера можно временно использовать:

QUEUE_DRIVER=sync

sync означает, что задачи не ставятся в фоновую очередь, а выполняются сразу.

Например, если система должна отправить письмо, она будет пытаться отправить его прямо во время действия пользователя или администратора.

1

Когда использовать sync

sync можно использовать:

  • для тестовой установки;

  • для простого проекта с небольшой нагрузкой;

  • для быстрой диагностики почты;

  • если на сервере не настроен Redis;

  • если Horizon временно не используется;

  • если нужно проверить, работает ли сама отправка писем без очередей.

2

Плюсы sync

  • не нужен Horizon;

  • не нужен отдельный queue worker;

  • проще настройка;

  • ошибки отправки часто видны сразу;

  • удобно проверять почту.

3

Минусы sync

  • действия пользователя могут выполняться дольше;

  • если SMTP-сервер долго отвечает, страница может ждать;

  • при ошибке почтового сервиса действие может завершиться ошибкой;

  • тяжёлые задачи могут замедлять админку или сайт;

  • отложенные задачи работают менее гибко, чем в полноценной очереди.

Когда sync полезен для проверки почты

Если письма не отправляются через Horizon, можно временно установить:

После этого отправьте тестовое письмо из панели управления.

Если при sync письмо отправилось, значит почтовые настройки рабочие, а проблема была в Redis, Horizon или обработчике очередей.

Если при sync письмо не отправилось, значит проблема не в Horizon, а в SMTP/API-настройках, DNS, пароле, портах или почтовом сервисе.


QUEUE_DRIVER=database

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

1

Когда использовать database

Этот режим можно использовать:

  • если Redis недоступен;

  • если проект небольшой;

  • если нужна простая фоновая очередь без Horizon;

  • если сервер не позволяет использовать Redis.

2

Что нужно для database

Для работы нужны таблицы очередей:

Также должен быть запущен обработчик очереди:

Обычно такой процесс запускают через Supervisor или другой менеджер процессов.

3

Плюсы database

  • не нужен Redis;

  • задачи не выполняются прямо в момент запроса;

  • можно хранить неуспешные задачи;

  • настройка проще, чем Redis + Horizon.

4

Минусы database

  • работает медленнее Redis;

  • при большой нагрузке увеличивает нагрузку на базу данных;

  • нет удобной панели Horizon;

  • нужно отдельно следить за worker-процессом.


QUEUE_DRIVER=redis

redis — рекомендуемый режим для production-сервера.

В этом режиме задачи складываются в Redis и обрабатываются фоновыми процессами.

В iEXExchanger Horizon настроен именно для работы с Redis-очередями.

1

Когда использовать redis

Используйте redis, если:

  • проект работает в production;

  • есть регулярные уведомления;

  • есть активные заявки;

  • используются фоновые задачи;

  • нужно, чтобы сайт не ждал отправку писем;

  • нужен Horizon для контроля очередей;

  • важна стабильная работа под нагрузкой.

2

Плюсы redis

  • быстро работает;

  • подходит для production;

  • хорошо работает с Horizon;

  • можно разделять очереди по приоритетам;

  • удобно отслеживать ошибки;

  • меньше нагрузка на базу данных по сравнению с database-очередью.

3

Минусы redis

  • Redis должен быть установлен и запущен;

  • Horizon должен быть правильно настроен;

  • нужно следить за процессами;

  • при остановленном Horizon задачи будут копиться и не выполняться.


Что такое Horizon

Horizon — это официальный инструмент Laravel для управления Redis-очередями.

Он позволяет:

  • обрабатывать фоновые задачи;

  • смотреть очереди;

  • видеть ошибки задач;

  • отслеживать скорость выполнения;

  • контролировать нагрузку;

  • разделять задачи по приоритетам.

В iEXExchanger Horizon используется для обработки Redis-очередей.

Какие очереди слушает Horizon

В iEXExchanger Horizon может обрабатывать несколько очередей:

Простыми словами:

  • mail-high — важные e-mail уведомления;

  • mail-low — менее срочные e-mail уведомления;

  • default — обычные фоновые задачи;

  • low — низкоприоритетные задачи;

  • media — обработка медиафайлов;

  • analytics — аналитические задачи;

  • order-recount — задачи пересчёта заявок;

  • presence — задачи присутствия и онлайн-статуса.


Когда Horizon нужен

Horizon нужен, если в .env указано:

В этом режиме фоновые задачи не выполняются сами по себе.

Их должен обрабатывать Horizon.

Если Horizon остановлен, письма и другие задачи могут не отправляться сразу, а будут ожидать обработки в очереди.

Когда Horizon можно не использовать

Horizon можно не использовать, если система работает в режиме:

В этом случае задачи выполняются сразу, без Redis и Horizon.

Но это простой или временный режим.

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

и запущенный Horizon.

Как временно отключить Horizon для проверки почты

Если письма не отправляются и нужно понять, проблема в почтовых настройках или очереди, можно временно переключить очередь на sync.

В .env установите:

После этого:

  1. Очистите конфигурационный кеш.

  2. Перезапустите Backend, если используется кеш конфигурации.

  3. Отправьте тестовое письмо из панели управления.

  4. Проверьте результат.

Если письмо отправилось — почта настроена правильно, нужно проверять Redis, Horizon или queue worker.

Если письмо не отправилось — проблема в почтовых настройках, сервере, DNS или почтовом провайдере.

После проверки рекомендуется вернуть production-настройку:

SMART_NOTIFIER_QUEUE

В системе уведомлений есть отдельный параметр:

Он отвечает за то, будут ли уведомления SmartNotifier ставиться в очередь.

Если указано:

уведомления отправляются через очередь.

Если указано:

уведомления SmartNotifier отправляются сразу, без постановки в очередь.

Важно понимать разницу:

SMART_NOTIFIER_QUEUE влияет на уведомления.

QUEUE_DRIVER влияет на всю очередь Laravel в целом.

Разница между QUEUE_DRIVER и SMART_NOTIFIER_QUEUE

1

QUEUE_DRIVER

Определяет, как Laravel обрабатывает все фоновые задачи.

Примеры:

Влияет на:

  • письма;

  • уведомления;

  • экспорты;

  • пересчёты;

  • архивирование;

  • аналитику;

  • webhooks;

  • другие фоновые задачи.

2

SMART_NOTIFIER_QUEUE

Определяет, ставить ли уведомления SmartNotifier в очередь.

Примеры:

Влияет именно на систему уведомлений SmartNotifier.


Рекомендуемые режимы

1

Для production-сервера

Рекомендуется:

При такой настройке должен быть запущен Horizon.

Это лучший режим для рабочего обменника.

2

Для простого сервера без Horizon

Можно использовать:

В этом случае задачи будут выполняться сразу через sync-драйвер.

3

Для диагностики почты

Можно временно использовать:

Так проще проверить, работает ли SMTP/API-отправка без участия Horizon.


Для отключения очереди только у уведомлений

Можно использовать:

В этом случае уведомления SmartNotifier будут отправляться сразу.

Используйте этот вариант только если понимаете, зачем отключаете очередь именно для уведомлений.

Что происходит, если Horizon не работает

Если используется:

и Horizon остановлен, возможны такие симптомы:

  • тестовое письмо не приходит;

  • клиентские письма не отправляются;

  • уведомления администраторам не приходят;

  • задачи экспорта не выполняются;

  • архивирование не запускается;

  • пересчёты не обрабатываются;

  • фоновые задачи остаются в ожидании.

В этом случае проверьте:

  • запущен ли Redis;

  • запущен ли Horizon;

  • не упал ли процесс Horizon;

  • нет ли ошибок в логах;

  • не переполнены ли очереди;

  • правильно ли указан QUEUE_DRIVER=redis.


Как понять, проблема в почте или в очереди

1

Отправьте тестовое письмо

Откройте раздел: «Настройки» — «Общие настройки» — «Уведомления» — «E-mail уведомления»

Нажмите: Тестовое сообщение

Если письмо не приходит, переходите к следующей проверке.

2

Временно включите sync

В .env временно установите:

Повторите отправку тестового письма.

3

Результат проверки

Если при sync письмо пришло:

Если при sync письмо не пришло:


Какие ошибки не связаны с Horizon

Horizon не исправляет ошибки почтового сервиса.

Если SMTP или API-почта возвращает ошибку, нужно проверять настройки почты, DNS или сервера.

Например:

  • неверный пароль;

  • неправильный host;

  • неправильный port;

  • неверный SSL/TLS;

  • authentication failed;

  • relaying denied;

  • connection refused;

  • connection timeout;

  • sender address rejected;

  • domain not verified;

  • SPF/DKIM не настроены.

Horizon отвечает только за выполнение фоновых задач.

Он не меняет правила SMTP-провайдера и не исправляет ошибки авторизации или DNS.


Что лучше выбрать

1

Если проект маленький

Можно начать с:

Но если заявок и уведомлений станет больше, лучше перейти на Redis + Horizon.

2

Если проект рабочий и принимает заявки

Рекомендуется:

и запущенный Horizon.

3

Если Redis недоступен

Можно использовать:

Но нужно настроить queue worker.

4

Если нужно быстро проверить почту

Временно используйте:


Что не рекомендуется использовать

1

QUEUE_DRIVER=null

Этот режим фактически отключает выполнение задач.

Для рабочего обменника его использовать не нужно.

2

QUEUE_DRIVER=beanstalkd

Это отдельный сервер очередей.

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

3

QUEUE_DRIVER=sqs

Это Amazon SQS.

Подходит для отдельной облачной инфраструктуры, но для обычной установки обменника чаще всего не нужен.


Пример настройки для production

При такой настройке:

  • задачи выполняются через Redis;

  • уведомления ставятся в очередь;

  • Horizon обрабатывает фоновые задачи;

  • неуспешные задачи сохраняются в таблицу failed jobs.

Пример настройки для диагностики почты

При такой настройке:

  • Horizon не нужен;

  • письма отправляются сразу;

  • проще увидеть ошибку SMTP/API;

  • удобно проверять Gmail, Яндекс Почту, Zoho Mail и Resend.

После проверки рекомендуется вернуть production-режим.

Пример настройки без очереди для уведомлений

При такой настройке:

  • остальные фоновые задачи могут работать через Redis;

  • уведомления SmartNotifier будут отправляться сразу;

  • Horizon продолжит обрабатывать другие очереди.

Используйте этот вариант только осознанно.


Краткая памятка

sync — задачи выполняются сразу, Horizon не нужен.

database — задачи сохраняются в базу, нужен queue:work.

redis — production-режим, нужен Redis и Horizon.

null — задачи не выполняются, для рабочего сайта не использовать.

SMART_NOTIFIER_QUEUE=false — отключает очередь только для уведомлений SmartNotifier.

QUEUE_DRIVER=sync — отключает фоновую очередь для всех Laravel-задач и выполняет их сразу.


Коротко

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

и запущенный Horizon.

Если письма не отправляются, временно переключите QUEUE_DRIVER на sync и отправьте тестовое письмо.

Если при sync письмо пришло — проблема в очередях, Redis или Horizon.

Если при sync письмо не пришло — проблема в настройках почты, DNS, сервере или почтовом провайдере.

Последнее обновление

Это было полезно?