Osgi 基于NodeID在Karaf Cell中的节点上调用命令

Osgi 基于NodeID在Karaf Cell中的节点上调用命令,osgi,apache-karaf,karaf,Osgi,Apache Karaf,Karaf,目前,我有一个只有两个节点的Cell设置(用于测试);如下图所示: | Id | Alias | Host Name | Port --+-------------------+----------------+--------------+----- x | 192.168.99.1:5702 | localhost:8182 | 192.168.99.1 | 5702 | 192.168.99.1:5701 | localh

目前,我有一个只有两个节点的Cell设置(用于测试);如下图所示:

  | 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面板,我希望通过该面板从所有其他节点获取统计信息。为此,我公开了涉及业务逻辑的MBean的自定义实现。我知道这些MBean可以使用Jolokia调用,我已经在这么做了。这意味着,所有这些不同的节点都将安装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 nodes=clusterManager.listNodes()

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

我需要在这里实现dosgi特有的东西吗

还是类似于ApacheCellar项目中乒乓球()的示例代码

在这方面的任何意见都将非常有用

顺便说一句,我试着在卡拉夫邮件列表中发布这篇文章,但是我的帖子被退回了

问候,,
Cooshal.

虽然没有通用的包装器命令,但您可以使用
cluster:config list--local
从该组中的节点获取配置。或者您是否需要根据每个节点的配置值执行应用程序级业务逻辑?Cellar的主要任务是提供集群组内配置的同步,因此您的任务背后的原始想法将非常有趣。嗨@Ancoron!我已经更新了用例,并试图使我的用例更加清晰。我能实现这样的目标吗?我认为你必须深入挖掘现有的地窖代码才能找到答案。内部Hazelcast地图似乎是获取信息的关键,因为您已经拥有了
ClusterManager
(请查看Cellar的一些配置*命令代码)。是的,的确如此!目前,我正在深入研究。最后,我也能把它贴在邮件列表上。那么,让我们看看。谢谢你的建议和意见。如果有任何进展,将发回。Hi@Ancoron,我设法创建了一个自定义命令,从目标节点(基于NodeID)获取配置信息(或执行我们在节点中指示它执行的任何操作)。谢天谢地,在我挖了更多的地窖后,ping的例子帮助了我。我将在github上发布示例源代码并在此处共享。虽然没有通用的包装器命令,但您可以使用
cluster:config list--local
从该组中的节点获取配置。或者您是否需要根据每个节点的配置值执行应用程序级业务逻辑?Cellar的主要任务是提供集群组内配置的同步,因此您的任务背后的原始想法将非常有趣。嗨@Ancoron!我已经更新了用例,并试图使我的用例更加清晰。我能实现这样的目标吗?我认为你必须深入挖掘现有的地窖代码才能找到答案。内部Hazelcast地图似乎是获取信息的关键,因为您已经拥有了
ClusterManager
(请查看Cellar的一些配置*命令代码)。是的,的确如此!目前,我正在深入研究。最后,我也能把它贴在邮件列表上。那么,让我们看看。谢谢你的建议和意见。如果有任何进展,将发回。Hi@Ancoron,我设法创建了一个自定义命令,从目标节点(基于NodeID)获取配置信息(或执行我们在节点中指示它执行的任何操作)。谢天谢地,在我挖了更多的地窖后,ping的例子帮助了我。我将在github上发布示例源代码,并在此处共享。