Ignite ClusterGroup.forAttribute 适用于客户端节点?

Ignite ClusterGroup.forAttribute works for client nodes?

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

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

然后我使用:

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

这似乎无法让我与那些具有属性集的客户端建立一个集群。这不适用于客户端节点吗?

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

运行以下测试:

        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());
        }

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