hi all,

 For SOAP message based content based routing, currently we use SOAPBuilder
and SOAPMessageFormater to build the soap envelop and serialize it. But
however in the content based routing the only message part required to read
is the parts that has the content need for routing. On the other hand there
is no need to build the response xml message if no mediation required for
response.

 Therefore we can make this perform better with the following steps. First
at the message builder level we create a buffered input stream to buffer
the read message and set this as a message context property. Then at the
synapse engine level we can copy this bufferedInput stream to out message
context. Now at the out message context we can access the buffered input
stream and use that to directly serialize the message from the input stream
after resetting the input stream.

 I have created the related patch here[1]. With this patch I could improve
the TPS for the following proxy services with 10k message from 1,700.7 to
12,135.48 (25% gain).


 <proxy name="CBRProxy" transports="https http" startOnLoad="true">

<target>

<inSequence>

<property name="passThroughProxy" value="true" scope="default"
type="STRING"/>

<filter xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
source="//order[1]/symbol" regex="IBM">

<then>

<send>

<endpoint key="RealService"/>

</send>

</then>

<else>

<makefault version="soap11">

<code xmlns:sf11="http://schemas.xmlsoap.org/soap/envelope/";
value="sf11:Server"/>

<reason value="First order must be for the symbol IBM"/>

</makefault>

<header name="To" action="remove"/>

<property name="RESPONSE" value="true"/>

<send/>

</else>

</filter>

</inSequence>

</target>

<publishWSDL key="ProxyWSDL-embedded.wsdl"/>

</proxy>


 Here are the other improvements can be done for this method.

 Here user have to set whether it is a pass through proxy or not using a
property mediator. However we can use some mechanism where each synapse
mediator set a property if that change the incoming message. If the message
has not been changed that can be pass through like this.

I have used buffered Input stream here. We may write a custom Input stream
reader to perform this job better.

Currently Axiom xpath build the whole soap envelope. Therefore if we can
write an axiom xpath engine which only builds the required parts
performance can be further improved.

I have created the patch basically demonstrate the concept. There can be
more efficient way of implementing as well.

 WDTY?

 Thanks,

Amila.

 [1] https://issues.apache.org/jira/browse/SYNAPSE-909


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Reply via email to