# Настройка работы сборки через RabbitMQ

# Установка среды разработки Erlang

Скачать установщик с https://www.erlang.org/downloads и запустить от имени администратора

image

Отметьте необходимые пункты для устновки и нажмите "Next"

image

Выберите директорию установки и нажмите "Next"

image

В следующем окне нажмите "Install" По окончании установки, нажмите "Close"

image

# Установка RabbitMQ

Скачать установщик с https://www.rabbitmq.com/download.html, запустить установку от имени администратора (нельзя запускать от пользователя с кириллицей), должны соблюдаться следующие требования:

  • Одновременно должна быть установлена ​​только одна версия Erlang (64-разрядная версия);
  • Erlang должен быть установлен с использованием учетной записи администратора;
  • Путь установки должен содержать только символы ASCII;

Выберите устанавливаемые компоненты и нажмите "Next":

image

Выберите путь установки и нажмите "Install":

image

После окончания установки нажмите "Finish":

image

Если в ходе установки будет запрошено добавление правил в брандмауэр Windows согласитесь и нажмите "ОК".

# Запуск и настройка службы RabbitMQ

  • Открыть терминал

    C:\Windows\System32\cmd.exe /k cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.11\sbin
    
  • Выполнить

    rabbitmq-plugins enable rabbitmq_management
    

image

  • Перезапустить службу RabbitMQ, для этого нажать сочетание клавишь Win + R, в открывшемся окне "Выполнить" ввести services.msc и нажать "ОК". Откроется окно управления службами, в котором выбрать службу RabbitMQ нажать правой кнопкой мыши и выбрать "Перезапустить":

image

  • Перейти в web-интерфейс управления сервером RabbitMQ для этого в адресной строке браузера ввести http://localhost:15672/

image

  • Войти под логин/пароль: guest/guest
  • На вкладке Admin добавить пользователя stack с паролем stack с правами админа и нажать "Add user":

image

  • Нажать на созданного пользователя, убедиться что в разделе Permissions стоит "/" в поле "virtul host" и нажать "Set permission":

image

# Настройка сборки для работы с RabbitMQ

1. В папке ..\Stack\Stack.Srv\Bin создать папку - Name - копия c ..\Stack\Stack.Srv\Bin\0, где Name - это произвольное имя латиницей (например, аббревиатура организации или версия тестовой сборки);

2. Создать в папке файл settings.toml, открыть блокнотом, вставить тескт и сохранить его:

[RabbitMQrpc]
host="localhost"
port=5672
vhost="/"
exchange=""
login="stack"
password="stack"
queue="amq.rabbitmq.reply-to"
routing_key="fl"
routing_key_asynch="fl_asynch"
qos=1
product_name="StackService"
auto_ack=true
time_limit=0.05

[RabbitMQService]
task="fl"
host="localhost"
port=5672
vhost="/"
exchange_in = "service_to_backend"
exchange_out = "service_from_backend"
exchange_type_in = "fanout"
exchange_type_out = "fanout"
login="stack"
password="stack"
queue=""
routing_key=""
product_name="StackService"

затем создать копии для каждой задачи;

3. Дать имена вида settings_fl.toml, settings_ul.toml, settings_admin.toml и т.д по имени задач;

4. В каждом из файлов настроить имя очередей, например для задачи fl:

      routing_key="2009_fl"
      routing_key_asynch="2009_fl_asynch"

и 

      exchange_in = "2009_service_to_backend"
      exchange_out = "2009_service_from_backend"

В разделе [RabbitMQrpc] в параметре vhost="/"

В разделе [RabbitMQrpc] в параметре queue="amq.rabbitmq.reply-to"

Поставить параметр auto_ack=true

В разделе [RabbitMQService] в параметре vhost="/"

В разделе [RabbitMQService] в параметре queue=""

image

5. Удостовериться, что подключена заплатка CommonApi\prg\RabbitMQ;

6. Запустить командную строку из папки со сборкой на уровне со Stack.Srv (например cd /d D:\Stack) и выполнить (если скрипт запускается на удаленном компьютере, предварительно скопировать папку NodeJS из V:\Stack.Version в папку со сборкой Стек и изменить пути к этой папке при выполнении команды):

 V:\Stack.Version\NodeJS\node.exe V:\Stack.Version\NodeJS\scripts autorun -address:localhost:8080 -name:Name -task:fl,ul,admin -user:sa -password: -maincount:2 -asynccount:2 -threads:20 -asyncthreads:2

image

  • name - префикс имени для программы автозапуска, должен совпадать с названием папки из пункта 1;
  • task - перечень создаваемых задач, разделенных запятой;
  • user - логин пользователя в БД, от имени которого запускаются задачи, например, SA;
  • password - пароль пользователя, указанного выше;
  • maincount - количество процессов для каждой задачи (синхронные) (желательно не более 5);
  • asynccount - количество процессов для каждой задачи (асинхронные);
  • threads - количество потоков на один stack.exe (порядка 20);
  • asyncthreads - количество одновременных асинхронных операций (отчетов, расчетов) на одном асинхронном stack.exe.

В результате выполнения скрипт создаст программы автозапуска, в данном примере по 4 на каждую задачу:

image

7. В папке ..\Stack\StackGateway (или StackGateway_mssql, в зависиомти от SQL сервера) открыть на редактирование файл application.yml

8. Вносим следующие изменения:

  • В разделе [server] указать порт (по-умолчанию 8080, при неоходимости его можно сменить, так же можно поменять количество потоков, которые будут одновременно обрабатывать запросы):

image

  • В разделе [stack] в параметре allowedOrigins указываем имя и/или адрес сервера, порт:

image

  • Ниже в параметре tasks настраиваем задачи, для этого указываем routingKey и routingKeyAsync, как в файлах settings.toml, каждой из задач:

image

  • Производим настройки сервисной очереди [service:] в строках exchangeIn и exchangeOut как в файле settings.toml, поменяв их местами:

image

  • в profiles активировать профиль postgresql или mssql:

image

  • в активированном профиле указать SQL сервер, имя базы, пользователя и пароль:

image

10. Создать задачу автозапуска, для этого запустить файл DispatcherSetup.cmd из папки ..\Stack\Stack.Clint\DispatcherSetup.cmd на запрос пароля ввести "stack", в открывшемся окне в левой части нажать правой кнопкой мыши на "Программы автозапуска" и выбрать "Добавить программу":

image

Ввести название и нажать "Сохранить":

image

11. Сконфигурировать созданную задачу, для этого в левой части окна выбрать вновь созданную программу автозапуска, в правой части окна:

  • в поле "cmd" ввести путь до файла javaw.exe в ..\Stack\Stack.Client\jre1.8.0_162\bin\javaw.exe, для этого в правой части окна настроек диспетчера выбрать параметр и дважды кликнуть, ввести путь и нажать "Сохранить":

image

  • таким же образом изменить параметр "cmdArgs" в котором указать пути до файла ..Stack\StackGateway\stackgateway-X.X.X.jar и файла application.yml, например:

-Xmx1024m -jar E:\ContinuousIntegration\20.09\StackGateway\stackgateway-0.0.2.jar --spring.config.location=classpath:file:E:\ContinuousIntegration\20.09\StackGateway\application.yml

image

  • изменить параметр "path", указав путь до папки StackGateway:

image

  • запустить созданную задачу:

image

  • После запуска задачи может быть сгенерирован ключ шифровки jwt токена с помощью url:port/generatePrivateKey, и установлен параметр secret, тогда все шлюзы, использующие один и тот же ключ смогу расшифровать jwt токен:

image

  • При внесении изменений в файл application.yml следует перезапустить в диспетчере задачу Gateway.

12. Настроить в диспетчере задачи для share, upload и BirtWebReporter, для этого:

  • Запустить командную строку из папки со сборкой на уровне с Stack.Srv (например cd /d D:\Stack2009) и выполнить:

V:\Stack.Version\NodeJS\node.exe V:\Stack.Version\NodeJS\scripts deploy -task: -user:sa -password:

  • в результате скрипт создаст задачи для share и upload, BirtWebReporter, front и admin, две последние остановить и удалить (фронт удалять в случае если будет настраиваться nginx);

Примечание

Upload можно настроить через сервлет, тогда нужно указать путь к папке upload в application.yml и в stack.ini.

  • так же скрипт создаст файл env.json и разместит его в папку stack-front (при ее наличии) или в папке на уровне откуда был запущен скрипт;

13. В файле env.json отредактировать api host для созданных задач автозапуска с указанием номера порта, который указывали в application.yml, url path prefix вида /stackgateway/fl, и строку аутентификации:

 {
 "API_HOST": "http://localhost:8182/stackgateway/fl",
 "API_HOST_FL": "http://localhost:8182/stackgateway/fl",
 "API_HOST_UL": "http://localhost:8182/stackgateway/ul",
 "API_HOST_ADMIN": "http://localhost:8182/stackgateway/admin",
 "API_HOST_AUTH":"http://localhost:8182/stackgateway/auth",
 "API_HOST_SHARE": "http://localhost:8080/Stack2009/share",
 "API_HOST_UPLOAD": "http://localhost:8080/Stack2009/upload"
 }
  • url api host для share и upload оставить без изменений:

image

14. Настроить nginx, для этого открыть файл ..\nginx\conf\nginx.conf на редактирование и добавить location для фронта и программ автозапуска, например:

image

В примере web сервер слушает на порту 8090, папка stack-front расположена по пути E:\ContinuousIntegration\20.09\stack-front, программы автозапуска настроены на порт 8182;

15. Запустить десктопную версию программы, создать группы POLE_USER и ROLE_ADMIN, добавить всех пользователей в группу ROLE_USER, пользоавтеля SA добавить также в группу ROLE_ADMIN.