As an example if we
want to monitor the number of tcp connections created during a proxy
invocation, the following steps can be performed.
1. Assume you need to
monitor the number of tcp connections created for the following proxy
service :
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="Proxy1"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="NO_KEEPALIVE" value="true" scope="axis2"/>
<clone>
<target>
<sequence>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</sequence>
</target>
<target>
<sequence>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</sequence>
</target>
<target>
<sequence>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</sequence>
</target>
</clone>
</inSequence>
<outSequence>
<aggregate>
<completeCondition>
<messageCount/>
</completeCondition>
<onComplete xmlns:m0="http://services.samples" expression="//m0:getQuoteResponse">
<send/>
</onComplete>
</aggregate>
</outSequence>
</target>
<description/>
</proxy>
You will see there
are 5 clones. Therefore it should create only 5 tcp connections.
2. We have used
SimpleStockQuoteService service as the backend.
3. Since you need to
monitor the connections created, we should delay the response coming
from the backend. Therefore we need to change the code slightly in
the SimpleStockQuoteService.
We have include a
Thread.sleep() for 10 seconds until we monitor the number of
connections.
Therefore go to
<ESB_HOME>/samples/axis2Server/src/SimpleStockQuoteService/src/samples/services/SimpleStockQuoteService.java
and add the Thread.sleep(10000); as below to hold the response for sometime.
and add the Thread.sleep(10000); as below to hold the response for sometime.
public GetQuoteResponse getQuote(GetQuote request) throws Exception {
Thread.sleep(10000);
if ("ERR".equals(request.getSymbol())) {
throw new Exception("Invalid stock symbol : ERR");
}
System.out.println(new Date() + " " + this.getClass().getName() +
" :: Generating quote for : " + request.getSymbol());
return new GetQuoteResponse(request.getSymbol());
}
4. Build the
SimpleStockQuoteService once again by “ant” in here,
<ESB_HOME>/samples/axis2Server/src/SimpleStockQuoteService
5. Now start the
axis2server
6. Now you have to
open a terminal and provide the following netstat command to get the
process id.
sudo netstat --tcp --listening --programs
You will see the
relevant SimpleStockQuoteService which is up in port 9000 like below.
tcp6 0 0
[::]:9000 [::]:* LISTEN
20664/java
So your process ID
will be 20664.
7. Then open a terminal and provide the below command to view the tcp
connections for the particular process id.
watch -n1 -d "netstat -n -tap | grep 20664"
8. Now open your soapui and send the following request to Proxy1
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
<soapenv:Header/>
<soapenv:Body>
<ser:getQuote>
<!--Optional:-->
<ser:request>
<!--Optional:-->
<xsd:symbol>IBM</xsd:symbol>
</ser:request>
</ser:getQuote>
</soapenv:Body>
</soapenv:Envelope>
9. View the tcp connections created in the terminal which you have
been monitoring as soon as you send the request. You should be able
to view only 3 connections since we have configured like that in
proxy using clone mediator.
tcp6 0 0 127.0.0.1:9000 127.0.0.1:44218
ESTABLISHED 20664/java
tcp6 0 0 127.0.0.1:9000 127.0.0.1:44219
ESTABLISHED 20664/java
tcp6 0 0 127.0.0.1:9000 127.0.0.1:44217
ESTABLISHED 20664/java