Hello everybody!
I have a custom connector in which I inserted some instruction to get the
time it takes to finish the execution. It is very simple and is like that :
@Override
public void connect(MessageContext messageContext) throws ConnectException {
long start = System.currentTimeMillis();
// MY CODE HERE
messageContext.getEnvelope().getBody().setText(<MY BADASS JSON>);
LOGGER.info("Generation of the message took " +
(System.currentTimeMillis() - start) + " ms");
}
My connector took around 110 ms to finish the connect method. Is it too
long or too short? For the moment, we don't care.
This connector is called from a custom sequence in which I do the same :
some properties to retrieve the start date and end date and process the
difference to see how much time the execution takes. Something like that:
<sequence name="mySequence" trace="disable" xmlns="
http://ws.apache.org/ns/synapse">
<property description="start" expression="get-property('SYSTEM_TIME')"
name="start" scope="default" type="LONG"/>
<custom.callMyConnector>
<!-- some properties here -->
</custom.callMyConnector>
<property description="myBadassJson" expression="json-eval($.)"
name="myBadassJson" scope="default" type="STRING"/>
<call-template description="logExecutionTime" target="logExecutionTime">
<with-param name="startExecutionTime" value="{$ctx:start}"/>
<with-param name="executionLabel" value="mySequence"/>
</call-template>
</sequence>
It calls a template which does just that:
<template name="logExecutionTime" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="startExecutionTime"/>
<parameter name="executionLabel"/>
<sequence>
<property description="startExecutionTime"
expression="$func:startExecutionTime" name="startExecutionTime"
scope="default" type="STRING"/>
<property description="executionLabel"
expression="$func:executionLabel" name="executionLabel" scope="default"
type="STRING"/>
<property description="endExecutionTime"
expression="get-property('SYSTEM_TIME')" name="endExecutionTime"
scope="default" type="LONG"/>
<script language="js"><![CDATA[var startExecutionTime =
mc.getProperty("startExecutionTime");
var endExecutionTime = mc.getProperty("endExecutionTime");
var executionLabel = mc.getProperty("executionLabel");
var logger = mc.getServiceLog();
logger.info(executionLabel + " executed in " +
(endExecutionTime - startExecutionTime) + " ms");]]></script>
</sequence>
</template>
And, here is the wild thing appearing: I have in my log:
TID: [-1234] [] [2017-10-30 14:03:55,464] INFO
{org.apache.synapse.mediators.bsf.ScriptMessageContext} - mySequence
executed in 3975 ms {org.apache.synapse.mediators.bsf.ScriptMessageContext}
3 secs! It is huge! It is like the json-eval invokation in the property
mediator, after the call of my connector, is taking too much time (around
3800 ms?). If I don't use json-eval, the ESB generates me XML and I suspect
that it take much more time to convert it from JSON to XML.
In addition, I put the payload in a property because I call many connectors
sequentially to do an aggregation of their payload later (via a script
mediator). I do the same for each connector I call.
Do you have an idea why is it taking so long to just put text from the
payload into a property (actually, if it is possible to just don't evaluate
it, it would be cool)?
Have you some directios to give me to optimize my process?
Thank you!
Regards,
Thomas
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev