Вызвать команду на узле в подвале Караф на основе NodeID - PullRequest
1 голос
/ 24 апреля 2019

На данный момент у меня есть установка подвала с двумя узлами (предназначенными для тестирования); как видно на свалке ниже:

  | Id                | Alias          | Host Name    | Port 
--+-------------------+----------------+--------------+----- 
x | 192.168.99.1:5702 | localhost:8182 | 192.168.99.1 | 5702 
  | 192.168.99.1:5701 | localhost:8181 | 192.168.99.1 | 5701 

Редактировать 1 - Дополнительная информация о настройке (начало):

У меня есть несколько подвальных узлов. Я пытаюсь сделать один узел мастером, который должен предоставлять веб-панель управления, через которую я хотел бы получать статистику со всех других узлов. Для этой цели я представил свои пользовательские реализации Mbeans, включающие мою бизнес-логику. Я понимаю, что эти mbeans можно вызывать с помощью Jolokia, и я уже делаю это. Таким образом, это означает, что на всех этих разных узлах будет установлена ​​Jolokia, а на главном узле будет установлен Hawtio (чтобы я мог подключаться к подчиненным узлам через Jolokia API через панель hawtio).

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

Желаемый процесс:

У меня есть доступ к службе ClusterManager через реестр служб. Таким образом, я могу вызвать clusterManager.listNodes() и просмотреть результат в моем MBean. Зацикливаясь на этом, я получаю только базовую информацию об узле. Но, если это возможно, я бы хотел проанализировать файл etc/org.ops4j.pax.web.cfg с каждого узла и получить номер порта (или значение свойства org.osgi.service.http.port).

При получении списка узлов я хотел бы получить ответ:

{
    "Node 1": {
        "hostname": "192.168.0.100",
        "port": 5701,
        "webPort": "8181",
        "alias": "Data-Node-A"
        "id": "192.168.0.100:5701"
    },
    "Node 2": {
        "hostname": "192.168.0.100",
        "port": 5702,
        "webPort": "8182",
        "alias": "Data-Node-B",
        "id": "192.168.0.100:5702"
    }
}

Редактировать 1 (конец):

Я пытаюсь найти способ выполнить определенные команды на определенном узле. Например, я хочу выполнить команду на узле *: 5702 из *: 5701 так, чтобы *: 5702 возвращала свойства и значения локального файла конфигурации.

Мой текущий метод не оптимален, так как я устанавливаю псевдоним (конечную точку веб-узла для jolokia) узла вручную и на основании этого я получаю желаемую информацию через мой пользовательский mbean. Я думаю, это не лучшая практика.

Пока у меня есть:

Set<Node> nodes = clusterManager.listNodes();

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

Нужно ли здесь реализовывать что-то конкретное для dosgi?

Или это будет что-то похожее на пример кода для пинг-понга (https://github.com/apache/karaf-cellar/tree/master/utils/src/main/java/org/apache/karaf/cellar/utils/ping) из проекта apache-cellar?

Любой вклад в это был бы очень полезен.

P.S. Я попытался опубликовать это в списке рассылки Karaf, но мои сообщения становятся отклоненными.

С уважением, Cooshal.

...