Работа 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