Справочник по настройке

Описание актуально для версий SuiteCRM 8.10.0+

В разделе перечислены переменные окружения и параметры системной конфигурации, связанные с Symfony Messenger и асинхронными заданиями. Переменные окружения задаются в файле .env.local, расположенном в корневой папке SuiteCRM. Параметры системной конфигурации задаются в файле config.php, расположенном в папке public/legacy/.

Никогда не редактируйте файл .env напрямую — он перезаписывается при обновлении. Всегда создавайте или редактируйте файл .env.local, чтобы переопределить значения. Файл .env.local имеет приоритет над файлом .env.

1. Транспортные строки подключения (DSN)

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

1.1. MESSENGER_INTERNAL_ASYNC_TRANSPORT_DSN

Подключение к основной очереди асинхронных заданий.

Значение по умолчанию

doctrine://default?queue_name=internal_async

Расположение

.env.local

По умолчанию в качестве брокера сообщений используется Doctrine (текущая база данных) . Сообщения хранятся в таблице messenger_messages с именем очереди internal_async. Это рекомендуемая и проверенная конфигурация, подходящая для большинства установок.

Поскольку SuiteCRM использует Symfony Messenger, также доступны альтернативные транспортные протоколы, такие как AMQP (RabbitMQ), Redis (RESP) и другие. Подробную информацию обо всех поддерживаемых транспортных протоколах см. в документации Symfony Messenger.

Тип Формат DSN Примечания

Doctrine

doctrine://default?queue_name=<name>

По умолчанию. Использует вашу существующую базу данных. Дополнительная инфраструктура не требуется.

AMQP

amqp://user:pass@host:5672/%2f/<queue>

RabbitMQ. Для высокопроизводительных или распределенных конфигураций.

Redis

redis://host:6379/messages

Очередь на основе Redis. Быстрая, в оперативной памяти.

Пример с использованием RabbitMQ:

MESSENGER_INTERNAL_ASYNC_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/suitecrm_async

1.2. MESSENGER_INTERNAL_FAILURE_TRANSPORT_DSN

Подключение к очереди ошибок. Неудачные сообщения перемещаются сюда для последующего анализа и повторной попытки отправки.

Значение по умолчанию

doctrine://default?queue_name=failed

Расположение

.env.local

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

2. Ведение журнала

2.1. MESSENGER_LOG_LEVEL

Управляет уровнем детализации файла журнала Symfony Messenger.

Значение по умолчанию

error

Расположение

.env.local

Допустимые значения (от наименее до наиболее подробного): emergency, alert, critical, error, warning, notice, info, debug.

Установите значение info, чтобы видеть каждое сообщение по мере его отправки и обработки — полезно для проверки работы обработчика:

MESSENGER_LOG_LEVEL=info

2.2. MESSENGER_LOG_FILE_NAME

Переопределяет имя файла журнала по умолчанию для журналов Symfony Messenger.

Значение по умолчанию

<env>.messenger.log (например, prod.messenger.log)

Расположение

.env.local

Пример:

MESSENGER_LOG_FILE_NAME=my_messenger.log

Файл журнала записывается в папку журналов (по умолчанию: logs/<env>/). Вы можете изменить папку журналов с помощью параметра LOG_DIR.

3. Расширенная настройка транспорта

Эти переменные предназначены для сложных настроек, когда требуются дополнительные транспорты помимо стандартной очереди internal-async.

3.1. MESSENGER_TRANSPORTS

Определяет дополнительные транспорты в виде объекта JSON. Пользовательские транспортные протоколы объединяются со встроенными протоколами (internal-async, failed, notifier-sync).

Значение по умолчанию

{} (пусто — используются только встроенные транспортные протоколы)

Расположение

.env.local

Каждая запись транспортного протокола может представлять собой простую строку DSN или полный объект конфигурации:

MESSENGER_TRANSPORTS='{
    "report-export": "doctrine://default?queue_name=report_export",
    "high-priority": {
        "dsn": "amqp://guest:guest@rabbitmq:5672/%2f/high_priority",
        "options": {
            "auto_setup": true
        },
        "serializer": "messenger.transport.symfony_serializer"
    }
}'

Поля объекта транспортного протокола:

Поле Описание

dsn

(обязательное) Строка подключения транспортного протокола.

options

(необязательное) Параметры, специфичные для транспорта, передаваемые драйверу брокера.

serializer

(необязательное) Пользовательский идентификатор службы сериализатора. Используйте полное имя класса, чтобы использовать пользовательский сериализатор из расширения.

Пользовательские имена транспорта должны быть уникальными и не должны конфликтовать со встроенными именами (internal-async, failed, notifier-sync). Если вы используете то же пользовательское имя, что и встроенный транспорт, оно будет переопределено.

3.2. MESSENGER_ROUTING

Переопределяет или расширяет маршрутизацию классов сообщений для транспорта. Строка определяет, какой транспорт обрабатывает каждый тип сообщения.

Значение по умолчанию

{} (пусто — используется встроенная маршрутизация)

Расположение

.env.local

Встроенная маршрутизация:

Класс сообщения Транспорт

App\AsyncTask\Message\AsyncTaskRun

internal-async

App\AsyncTask\Message\AsyncTaskCompleted

internal-async

App\AsyncTask\Message\AsyncTaskProgressed

internal-async

App\AsyncTask\Message\AsyncTaskFailure

internal-async

App\Notifier\Message\Notification

notifier-sync

Пользовательские настройки объединяются с настройками по умолчанию, чтобы перенаправить пользовательский класс сообщений на пользовательский транспорт:

MESSENGER_ROUTING='{
    "App\Extension\myExt\Message\MyCustomMessage": "report-export"
}'

Сообщения асинхронных заданий (AsyncTaskRun, AsyncTaskCompleted и т. д.) обычно должны оставаться на internal-async. Меняйте эту настройку только в том случае, если понимаете последствия — система асинхронных заданий ожидает, что все сообщения заданий будут передаваться по одному и тому же транспорту для надлежащего управления жизненным циклом.

3.3. MESSENGER_SERIALIZER

Строка переопределяет глобальную конфигурацию сериализатора сообщений.

Значение по умолчанию

Сериализатор Symfony в формате JSON

Расположение

.env.local

Конфигурация по умолчанию:

MESSENGER_SERIALIZER='{
    "default_serializer": "messenger.transport.symfony_serializer",
    "symfony_serializer": {
        "format": "json",
        "context": {}
    }
}'

Как правило, эти настройки менять не требуется. Сериализаторы для каждого транспорта (задаются через MESSENGER_TRANSPORTS) имеют приоритет над глобальным сериализатором.

4. Маршрутизация асинхронных заданий

4.1. ASYNC_TASK_ROUTES

Маршрутизация определенных обработчиков асинхронных заданий на определенные транспорты. Это позволяет разделять различные типы фоновой работы на разные очереди (например, отправлять ресурсоемкие PDF-файлы на выделенный транспорт с большими ресурсами).

Значение по умолчанию

{} (пусто — все задания используют маршрутизацию по умолчанию)

Расположение

.env.local

Значение представляет собой JSON-объект с двумя разделами:

  • модули — маршрутизация заданий по модулю и ключу обработчика ( специфична для каждого модуля).

  • По умолчанию — маршрутизация заданий по ключу обработчика независимо от модуля (резервный вариант).

Маршруты, специфичные для модуля, имеют приоритет над маршрутами по умолчанию.

ASYNC_TASK_ROUTES='{
    "modules": {
        "accounts": {
            "print-pdf": "report-export",
            "export": "report-export"
        }
    },
    "default": {
        "print-pdf": "report-export"
    }
}'

В этом примере:

  • Экспорт PDF и CSV из модуля Контрагенты осуществляется через транспорт report-export.

  • Экспорт PDF из любого другого модуля также осуществляется через report-export (через раздел default).

  • Все остальные задания используют стандартный транспорт internal-async.

Имена транспорта, используемые здесь (например, report-export), должны быть определены либо как встроенный транспорт, либо через MESSENGER_TRANSPORTS. Если маршрут ссылается на несуществующий транспорт, отправка сообщения завершится неудачей.

5. Системная конфигурация (config.php)

Эти настройки находятся в файле config.php (расположенном в папке public/legacy/ или в корневом каталоге SuiteCRM, в зависимости от вашей конфигурации). Настройки управляют размерами пакетов для асинхронной обработки заданий.

5.1. Настройки размера пакета

Настройка Значение по умолчанию Описание

max_migration_items_to_queue_per_run

50

Максимальное количество элементов в очереди на пакет во время фазы постановки в очередь заданий миграции.

max_migration_items_to_process_per_run

20

Максимальное количество элементов для обработки на пакет во время фазы обработки заданий миграции.

max_processes_items_to_queue_per_run

50

Максимальное количество элементов в очереди на пакет во время фазы постановки в очередь асинхронных заданий на основе процессов (пакетный экспорт и т. д.).

max_processes_items_to_process_per_run

20

Максимальное количество элементов для обработки на пакет во время фазы обработки асинхронных заданий на основе процессов.

Меньшие значения уменьшают использование памяти на пакет, но увеличивают количество пакетов (и общее время обработки). Большие значения приводят к ускорению обработки, но используют больше памяти.

Чтобы изменить значение, добавьте или отредактируйте запись в файле config_override.php:

$sugar_config['max_migration_items_to_process_per_run'] = 50;

6. Сводка по всем переменным

Переменная Значение по умолчанию Файл

MESSENGER_INTERNAL_ASYNC_TRANSPORT_DSN

doctrine://default?queue_name=internal_async

.env.local

MESSENGER_INTERNAL_FAILURE_TRANSPORT_DSN

doctrine://default?queue_name=failed

.env.local

MESSENGER_LOG_LEVEL

error

.env.local

MESSENGER_LOG_FILE_NAME

<env>.messenger.log

.env.local

MESSENGER_TRANSPORTS

{}

.env.local

MESSENGER_ROUTING

{}

.env.local

MESSENGER_SERIALIZER

{}

.env.local

ASYNC_TASK_ROUTES

{}

.env.local

max_migration_items_to_queue_per_run

50

config.php

max_migration_items_to_process_per_run

20

config.php

max_processes_items_to_queue_per_run

50

config.php

max_processes_items_to_process_per_run

20

config.php

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.