How to get cluster nodes information on Wildfly 21?

931 views Asked by At

I am trying to get the cluster information (esp nodes list) with the below Application code.

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

String clusterMembers = (String) (server.getAttribute(new ObjectName("jboss.infinispan:type=CacheManager,name=\"ejb\",component=CacheManager"), "clusterMembers"));
      (or)
Object obj = server.getAttribute(ObjectName.getInstance("jgroups:type=channel,cluster=\"web\""), "View");

Both are throwing InstanceNotFoundExceptions.

javax.management.InstanceNotFoundException: jgroups:type=channel,cluster="web"
2021-02-08 15:39:59,046 ERROR [stderr:71] (default task-1) javax.management.InstanceNotFoundException: jgroups:type=channel,cluster="web"
2021-02-08 15:39:59,047 ERROR [stderr:71] (default task-1)  at org.jboss.as.jmx.PluggableMBeanServerImpl.findDelegate(PluggableMBeanServerImpl.java:1113)
2021-02-08 15:39:59,047 ERROR [stderr:71] (default task-1)  at org.jboss.as.jmx.PluggableMBeanServerImpl.getAttribute(PluggableMBeanServerImpl.java:389)
1

There are 1 answers

0
Paul Ferraro On

There are a number of ways to do this. Programmatically, perhaps the simplest way is to use WildFly's clustering API. For details, see: https://github.com/wildfly/wildfly/blob/master/docs/src/main/asciidoc/_high-availability/Clustering_API.adoc#group-membership

Alternatively, you can also use WildFly's CLI to obtain cluster information. e.g.

[standalone@embedded /] /subsystem=jgroups/channel=ee:read-attribute(name=view)
{
    "outcome" => "success",
    "result" => "[localhost|0] (1) [localhost]"
}

Alternatively, you can obtain cluster information using Infinispan or JGroups APIs directly. e.g.

@Resource(lookup = "java:jboss/infinispan/cache-container/web")
private EmbeddedCacheManager manager;

@Resource(lookup = "java:jboss/jgroups/channel/default")
private JChannel channel;

public void foo() {
   System.out.println(this.manager.getMembers());
   System.out.println(this.channel.getView());
}

Lastly, if you prefer to go the JMX route, ensure that your WildFly configuration defines a JMX subsystem, otherwise no mbeans will be registered.

Infinispan mbeans are registered using the domain: "org.wildfly.clustering.infinispan". Make sure you are using 22.0.1.Final which includes a fix for https://issues.redhat.com/browse/WFLY-14286

Your jgroups jmx code name is almost correct - using the default configuration, each Infinispan cache manager uses a distinct ForkChannel based on a common JChannel, named "ee".