КАК ОПРЕДЕЛИТЬ, КОГДА JBOSS ПОЛНОСТЬЮ ЗАПУЩЕН И ГОТОВ ПРИНИМАТЬ РАСПРЕДЕЛЕНИЯ?

Вопрос или проблема

У меня есть простое веб-приложение “проверка работоспособности”, которое я хочу развернуть на сервере JBoss EAP, как только он будет запущен. Но что означает “запущен”? Если мой скрипт, который вызывает jboss cli, запускается слишком рано после того, как JBoss сообщает, что он закончил, я получаю сообщение, в котором говорится

  {"WFLYDC0074: Операция завершилась неудачей или была отменена на всех серверах. Ошибки сервера:" => {"server-group" => {"main-server-group" => {"host" => {"master" => {"master-1-server-1" => "WFLYCTL0379: Система загружается; выполнение удаленных операций управления в настоящее время недоступно"}}}}}}

Как я могу определить, что JBoss действительно готов к обработке развертываний?

В качестве альтернативы, есть ли механизм, позволяющий мне автоматически развернуть что-то при запуске?

#!/bin/bash

while true
  do
    wildflyStarted=$(grep -ic "Wildfly.*started in.*ms.*Started.*of.*services" /opt/wildfly/standalone/log/server.log)
    if [[ "$wildflyStarted" -eq "1" ]]; then
      break;
    else
      sleep 1;
    fi
  done

while true
  do
    ejbcaStatus=$(/opt/wildfly/bin/jboss-cli.sh -c --commands="cd deployment,cd ejbca.ear,read-attribute status")
    if [[ "$ejbcaStatus" -eq "OK" ]]; then
      break;
    else
      sleep 5;
    fi
  done

Этот скрипт сработал для меня.

Ответ или решение

Как обнаружить, когда JBoss полностью запущен и готов принять развертывание?

Запуск JBoss EAP (Enterprise Application Platform) включает в себя несколько этапов, и важно правильно определить момент, когда сервер действительно готов к развертыванию приложений. Понимание этого процесса поможет избежать ошибок, связанных с преждевременной отправкой команд на развертывание, что может привести к сообщениям об ошибках, например:

{"WFLYDC0074: Operation failed or was rolled back on all servers. Server failures:" => {"server-group" => {"main-server-group" => {"host" => {"master" => {"master-1-server-1" => "WFLYCTL0379: System boot is in process; execution of remote management operations is not currently available"}}}}}}

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

1. Проверка состояния конечной точки Wildfly

Одним из простых способов определения готовности JBoss является мониторинг логов сервера. Можно использовать следующий скрипт на Bash:

#!/bin/bash

while true
do
    wildflyStarted=$(grep -ic "Wildfly.*started in.*ms.*Started.*of.*services" /opt/wildfly/standalone/log/server.log)
    if [[ "$wildflyStarted" -eq "1" ]]; then
        break;
    else
        sleep 1;
    fi
done

Этот скрипт будет периодически проверять файл server.log на наличие строки, указывающей на завершение инициализации всех сервисов Wildfly. Как только лог подтвердит готовность, цикл завершится.

2. Проверка статуса развертывания

Для подтверждения готовности развернуть приложения мы также можем использовать JBoss CLI (Command Line Interface) для проверки статуса конкретного развертывания. Примерный код выглядит так:

while true
do
    ejbcaStatus=$(/opt/wildfly/bin/jboss-cli.sh -c --commands="cd deployment,cd ejbca.ear,read-attribute status")
    if [[ "$ejbcaStatus" -eq "OK" ]]; then
        break;
    else
        sleep 5;
    fi
done

Этот цикл будет проверять состояние развертывания вашего приложения, и когда оно будет готово (статус “OK”), выполнение скрипта продолжится.

Альтернативный способ: Автоматическое развертывание

Если вы хотите автоматизировать процесс развертывания приложений при старте JBoss, вы можете воспользоваться механизмом автоматического развертывания (hot deployment). Для этого достаточно поместить ваш архив приложения (например, ejbca.ear) в каталог standalone/deployments.

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

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...