Перейти к содержанию

Работа API внешнего портала через очередь без доступа в основную базу данных

Внешний портал может работать в режиме клиента (прокси) без доступа к СУБД основной системы. Все запросы к API будут помещаться в очередь (Rabbitmq) для обработки. В защищенном сегменте необходимо развернуть внешний портал в режиме сервера. В режиме сервера он будет забирать задачи из очереди (Rabbitmq) выполнять запросы и ответ возвращать в очередь для передачи на проксирующий внешний портал.

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

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

Портал в режиме сервера должен иметь доступ к очереди (Rabbitmq) и основной базе данных.

Проксирующий портал будет обрабатывать только модуль rest-api в который входят все обращения по API и веб-хуки для голосовых ассистентов Алиса и Маруся.

Настройка клиентского (проксирующего) портала

Основная папка

Разархивируйте mfc_portal.zipна жесткий диск в папку, созданную при установке HTTP сервера. В данном руководстве подразумевается, что это будет сделано в папку mfc_portal_broker.

Или скачайте файл с последним обновлением http://azovkomeks.ru/update/mfc_portal/update.zip и используйте его вместо дистрибутива.

Для работы портала необходимо установить права не выше 744, т.к. при обновлении будут заменяться файлы на стороне сервера

Настройка файлов конфигураций

Для работы портала необходимо настроить несколько конфигурационных файлов:

/config/db.php - файл для настройки подключения к персональной базе портала (Можно не настраивать подключение)

/config/rabbitmq.php - файл для настройки подключения к серверу очереди Rabbitmq

Формат файла для подключения к БД /config/db.php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'pgsql:host=192.168.10.10;dbname=database',
    'username' => 'postgres',
    'password' => '****',
    'charset' => 'utf8',
    'enableSchemaCache' => true,
];

Формат файла для подключения к очереди /config/rabbitmq.php

return array(
    "host" => "rabbitmq.server",
    "port" => "5672",
    "user" => "*",
    "password" => "*",
    "client_wait_timeout" => 30, // время ожидания клиентом ответа от сервера в секундах
    "server_step_timeout" => 30, // время ожидания и исполнения серверной части в секундах
    "server_step_count" => 100, // количество пакетов обрабатываемых в рамках одного исполнения скрипта
//    "type" => RABBITMQ_CLIENT,
    "type" => RABBITMQ_SERVER,
);

Для портала в режиме клиента необходимо указать для type значение RABBITMQ_CLIENT. При корректной настройке виртуального хоста значение type будет проигнорировано. Для клиента необходим параметр client_wait_timeout для определения времени ожидания ответа сервера. Если за указанное время не придет ответ, будет показана соответствующая ошибка. В т.ч. это значение будет указано в параметре "время жизни сообщения в очереди".

Настройка хоста

Откройте файл httpd-vhosts.conf для windows или /etc/apache2/sites-available/000-default.conf для linux и настройте хост для АИС МФЦ

<VirtualHost *:80>
    DocumentRoot /var/www/mfc_portal/web-client
    ServerName mfc-portal
    Options +Indexes +FollowSymLinks
    <Directory "/var/www/mfc_portal/web-client">
        AllowOverride All
        php_admin_value mbstring.func_overload 0
        php_admin_value mbstring.internal_encoding UTF-8
    </Directory>
</VirtualHost>

прописав Ваши пути и имя хоста.

Для подключения к серверу очереди требуется модуль Sockets для php.

Обновление портала

Если настроено подключение к базе данных можно воспользоваться личным кабинетом администратора для обновления либо физически заменить файлы сервера из пакета с обновлением. Для входа в личный кабинет администратора необходимо перейти по адресу http://****/pc/admin/lk

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

Для серверной части необходимо стандартная настройка внешнего портала с указанием конфигурации в файле /config/rabbitmq.php.

Для портала в режиме сервера необходимо указать для type значение RABBITMQ_SERVER.
Для сервера необходим параметр server_step_timeout который влияет на время ожидания очередного пакета в рамках одного шага. Для оптимальной работы оно должно быть сопоставимо со значением client_wait_timeout. Параметр server_step_count указывает сколько шагов будет выполняться в рамках одного вызова скрипта. К примеру если 100 шагов с временем ожидания 30 секунд, то максимальное время выполнения может составлять 30*100 секунд. После обработки 100 сообщений скрипт будет завершен и его необходимо запустить повторно.

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

Для запуска скрипта необходимо вызвать любым способом адрес: http://*******/portal/broker/rabbitmq. В этот момент произойдет инициализация сервера и подключение к очереди в качестве потребителя. Каждый запущенный скрипт будет подключаться к очереди как потребитель и к базе данных МФЦ.

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

[program:rabbitmq]
process_name=%(program_name)s_%(process_num)02d
command=curl http://******/portal/broker/rabbitmq
autostart=true
autorestart=true
user=www-data
numprocs=30
stdout_logfile=/var/log/****.log 

В соответствии с вышеуказанным конфигом будет одновременно запущено 30 экземпляров скрипта. При этом нужно учитывать что каждый скрипт держит подключение к МФЦ до момента завершения. После успешного или не очень завершения работы скрипта он автоматически будет перезапущен повторно. Управляйте параметром numprocs с учетом возможностей вашего сервера БД. Чем больше параллельно будет запущено скриптов, тем выше будет конкурентность обрабатываемых задач.

Настройка Rabbitmq

В качестве сервера очереди используется Rabbitmq. Все очереди создаются в автоматическом режиме, необходимо обеспечить доступ к этому серверу с двух порталов (клиентского и серверного).

Инструкцию по установке можете найти по адресу https://www.rabbitmq.com/docs/download