【问题标题】:Ignite ClusterGroup.forAttribute works for client nodes?Ignite ClusterGroup.forAttribute 适用于客户端节点?
【发布时间】:2020-09-19 03:04:51
【问题描述】:

我刚刚在另一个问题中了解到,我可以在客户端节点上运行计算任务,这很棒。 但是,我不想在所有客户端上执行任务,只在选定的客户端节点上执行。我通过配置中的属性来识别节点:

<property name="userAttributes">
    <map>
        <entry key="Role" value="FOR_COMPUTE" />
    </map>
</property>

然后我使用:

ignite.cluster().forClients().forAttribute("Role", "FOR_COMPUTE");

这似乎没有让我与那些设置了属性的客户端组成一个集群组。这不适用于客户端节点吗?

【问题讨论】:

    标签: java ignite


    【解决方案1】:

    用户属性确实有效。 仔细检查您的设置。确保您使用正确的配置启动客户端。

    运行以下测试:

            IgniteConfiguration serverConfig = new IgniteConfiguration();
            serverConfig.setIgniteInstanceName("server");
            Ignition.start(serverConfig);
    
    
            IgniteConfiguration clientConfig = new IgniteConfiguration();
            clientConfig.setClientMode(true);
            clientConfig.setIgniteInstanceName("client");
    
            Map<String, String> userAttributes = new HashMap<>();
            userAttributes.put("Role", "FOR_COMPUTE");
            clientConfig.setUserAttributes(userAttributes);
    
    
            Ignite ignite = Ignition.start(clientConfig);
            System.out.println("Role user attribute value: " + ignite.cluster().localNode().attribute("Role"));
            ClusterGroup filteredNodes = ignite.cluster().forClients().forAttribute("Role", "FOR_COMPUTE");
            for (ClusterNode node:  filteredNodes.nodes()) {
                System.out.println("filtered id: "+ node.id());
            }
    

    您应该会看到正确的结果。

    【讨论】:

    • 您的测试代码确实有效。我正在从 XML 读取我的配置,我现在会仔细检查一下。
    • 我发现了我这边的问题。在某个地方我有 .forServers() 在链中。感谢您的大力帮助!
    猜你喜欢
    • 2022-07-06
    • 2018-04-27
    • 2017-10-25
    • 2021-12-03
    • 2021-08-16
    • 2020-04-06
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多