#java #ignite
#java #ignite
Вопрос:
Я только что узнал в другом вопросе, что я могу запускать вычислительные задачи на клиентских узлах, и это здорово. Однако я не хочу выполнять задачи на всех клиентах, только на выбранных клиентских узлах. Я идентифицирую узлы по атрибутам в их конфигурации:
<property name="userAttributes">
<map>
<entry key="Role" value="FOR_COMPUTE" />
</map>
</property>
Затем я использую:
ignite.cluster().forClients().forAttribute("Role", "FOR_COMPUTE");
Похоже, это не дает мне clusergroup с теми клиентами, у которых установлен атрибут. Разве это не работает для клиентских узлов?
Ответ №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());
}
Вы должны увидеть правильные результаты.
Комментарии:
1. Ваш тестовый код действительно работает. Я читаю свою конфигурацию из XML, но сейчас я перепроверю это.
2. Я обнаружил проблему на своей стороне. Где-то у меня был .forServers() в цепочке. Спасибо за вашу большую помощь!