根据NodeID在Karaf Cellar中的节点上调用命令

时间:2019-04-24 07:15:53

标签: osgi apache-karaf karaf

目前,我的酒窖设置中只有两个节点(用于测试)。如下面的转储所示:

  | 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-有关设置的其他信息(开始):

我有多个酒窖节点。我正在尝试使一个节点成为主节点,这应该公开一个管理Web面板,我希望通过该面板从所有其他节点获取统计信息。为此,我公开了涉及我的业务逻辑的Mbeans定制实现。我知道可以使用Jolokia调用这些mbean,而我已经这样做了。因此,这意味着所有这些不同的节点都将安装Jolokia,而主节点将安装Hawtio(这样我就可以通过hawtio面板通过Jolokia API连接到从节点)。

现在,我为每个节点手动分配别名(这是指它通过pax.web配置公开的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(结束):

我正在尝试找到一种在特定节点上执行特定命令的方法。例如,我想从*:5701在节点*:5702上执行命令,以使*:5702返回本地配置文件的属性和值。

我当前的方法不是最佳方法,因为我正在手动设置节点的别名(jolokia的Web端点),并在此基础上通过自定义mbean检索所需的信息。我想这不是最佳实践。

到目前为止,我有:

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

因此,如果我遍历这组节点,我想根据节点ID从每个节点的本地配置文件中检索配置设置。

我需要在此处实现特定于dosgi的东西吗?

还是会类似于apache-cellar项目中的乒乓(https://github.com/apache/karaf-cellar/tree/master/utils/src/main/java/org/apache/karaf/cellar/utils/ping)的示例代码?

对此进行任何输入都会很有帮助。

P.S。我曾尝试将其发布在Karaf邮件列表中,但我的帖子却被退回。

关于, 库萨尔。

0 个答案:

没有答案