Unabhängig davon, welches WSO2-Produkt verwendet wird, ist es wichtig, den aktuellen Status des Servers zu kennen und dementsprechend den Prozess zu starten, herunterzufahren oder einfach laufen zu lassen. Man könnte dies manuell überprüfen und übernehmen, indem Sie sich einfach in die Carbon-Konsole einloggen, aber wenn der Prozess automatisch ablaufen muss, ist das keine gute Option mehr. In diesem Blog werde ich Ihnen erklären, wie Sie überprüfen können, ob WSO2 läuft.
Intern ist der WSO2-Server immer auf einen der folgenden Status eingestellt: STARTING, RUNNING, IN_MAINTENANCE, RESTARTING, oder SHUTTING_DOWN. In der Annahme, dass jeder Status selbsterklärend ist, wird sich der Rest dieses Blogs darauf konzentrieren, wie Sie den aktuellen Status von einer installierten WSO2-Instanz erhalten.
Es gibt zwei Hauptmethoden, um auf den Status des WSO2-Servers zuzugreifen: erstens, indem Sie die SOAP-APIs aufrufen, und zweitens, indem Sie JMX-RMI verwenden, um ihn von der MBean abzurufen.
Statusprüfung über SOAP API
WSO2 enthält eine umfangreiche Liste von Verwaltungsdiensten. Sie können die Liste einsehen, wenn Sie den Server mit aktivierter OSGI-Konsole über ./wso2server.sh -DosgiConsole starten und in der Konsole den Befehl osgi> listAdminServices eingeben.
Der Dienst ServerAdmin in dieser Liste liefert die Statusinformationen über den Server. Auf diese Informationen kann auch über SOAP zugegriffen werden. Wenn also das Flag carbon.xml <HideAdminServiceWSDLs> auf false gesetzt ist, kann die wsdl des Dienstes über die URL https://[WSO2-HOST]:9443/services/ServerAdmin?wsdl abgerufen werden.
Die WSDL-Datei definiert eine Liste von Operationen, von denen zwei zur Überprüfung des Status verwendet werden können. Diese Operationen heißen „getServerStatus“ und „isAlive“ und werden als SOAP-Anfragen an den Server-Endpunkt unter https://[WSO2-HOST]:9443/services/ServerAdmin gestellt.
Als nächstes folgen diese Operationsanfragen und Beispielantworten vom Server:
isAlive Operation
Diese Operation erfordert keine Parameter und liefert ein binäres true/false bezüglich der Liveness des WSO2-Servers. Nützlich für die Überprüfung der Lebendigkeit.
isAlive Anfrage:
<soap:Envelope xmlns_soap="http://www.w3.org/2003/05/soap-envelope" xmlns_xsd="http://org.apache.axis2/xsd">
<soap:Header/>
<soap:Body>
<xsd:isAlive/>
</soap:Body>
</soap:Envelope>
isAlive Antwort Beispiel:
<soapenv:Envelope xmlns_soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Body>
<ns:isAliveResponse xmlns_ns="http://org.apache.axis2/xsd">
<ns:return>true</ns:return>
</ns:isAliveResponse>
</soapenv:Body>
</soapenv:Envelope>
getServerStatus Operation
Diese Operation gibt jeden der zuvor erwähnten internen WSO2-Instanzstatus zurück. Hauptsächlich nützlich für das Auslösen von Prozessen zu einem bestimmten Zeitpunkt im Leben der Instanz. Auch hier werden keine Abfrageparameter benötigt.
getServerStatus Anfrage:
<soap:Envelope xmlns_soap=”http://www.w3.org/2003/05/soap-envelope” xmlns_xsd=”http://org.apache.axis2/xsd”>
<soap:Header/>
<soap:Body>
<xsd:getServerStatus/>
</soap:Body>
</soap:Envelope>
getServerStatus Antwort Beispiel:
<soapenv:Envelope xmlns_soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Body>
<ns:getServerStatusResponse xmlns_ns="http://org.apache.axis2/xsd">
<ns:return>RUNNING</ns:return>
</ns:getServerStatusResponse>
</soapenv:Body>
</soapenv:Envelope>
Um curl zu verwenden, um die Anfrage an den Server zu senden, speichern Sie die Anfrage in einer XML-Datei getServerStatus.xml und geben den Befehl ein:
curl -k -H "Content-Type: application/soap+xml;charset=UTF-8;" -H "SOAPAction:urn:getServerStatus " --basic -u "user:password" --data @getServerStatus.xml https://host:9443/services/ServerAdmin
Statusprüfung über JMX-RMI
Wenn die Überprüfung des Status über SOAP-Dienste nicht in Frage kommt, besteht eine weitere Standardmöglichkeit darin, den Status direkt über die MBean zu überprüfen. Der laufende Java-Prozess org.wso2.carbon.bootstrap.Bootstrap stellt die MBean ServerAdmin zur Verfügung. Diese MBean enthält die Attribute „Alive“ und „ServerStatus“, die die gleichen Informationen liefern wie die entsprechenden SOAP-Anfragen. Die Attribute können manuell mit der Java Monitoring Console überprüft werden, die mit dem Befehl $jconsole einfach geöffnet werden kann, wie in den folgenden Screenshots gezeigt.
Alive attribute:
Hier ist ein „Alive = true“ im Attributwertfeld zu sehen:
ServerStatus-Attribut:
Hier sehen Sie ein „ServerStatus = RUNNING“ im Attributwertfeld:
Wenn nun die Serverattribute programmatisch erfasst werden sollen, muss eine Verbindung zum Prozess-MBean über JMX Remote Method Invocation (RMI) hergestellt werden.
Der folgende Codeschnipsel zeigt, wie diese Verbindung mit Java aufgebaut werden kann:
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
…
String JMX_SERVICE_URL = "service:jmx:rmi://[host]:11111/jndi/rmi://[host]:9999/jmxrmi";
//Provide credentials required by server for user authentication HashMap environment = new HashMap();
String[] credentials = new String[] {"user", "password"}; environment.put (JMXConnector.CREDENTIALS, credentials);
//Create an RMI connection Client and connect to RMI Server JMXServiceURL url = new JMXServiceURL(JMX_SERVICE_URL); JMXConnector jmxc = JMXConnectorFactory.connect(url, environment);
//Get an MBeanServerConnection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
//Construct the ObjectName for the Carbon MBean
ObjectName mBeanName = new ObjectName("org.wso2.carbon:type=ServerAdmin"); ServerAdminMBean mBeanProxy = JMX.newMBeanProxy(mbsc, mBeanName,ServerAdminMBean.class);
System.out.println("Status: " + mBeanProxy.getServerStatus());
System.out.println("is alive: " + mBeanProxy.isAlive());
jmxc.close();
Den vollständigen Code und eine kompilierte Version finden Sie auf GitHub unter https://github.com/luisguillo/wso2-server-probe
Fazit
Die kohlenstoffbasierten WSO2-Anwendungen verfügen über verschiedene Optionen, um zu überprüfen, ob die Anwendung läuft, z.B. den SOAP-Dienst oder das JMX MBean. Da es sich um eine Java-basierte Webanwendung handelt, gibt es noch viele weitere Möglichkeiten. Es ist jedoch nicht immer möglich, den aktuellen WSO2 Serverstatus zu ermitteln, wie in diesem Blog beschrieben.