This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Sample 652: Priority Based Message Mediation

Note that WSO2 EI is shipped with the following changes to what is mentioned in this documentation :

  • <PRODUCT_HOME>/ repository/samples/ directory that includes all Integration profile samples is changed to <EI_HOME>/ samples/service-bus/.
  • <PRODUCT_HOME>/ repository/samples/resources/ directory that includes all artifacts related to the Integration profile samples is changed to <EI_HOME>/ samples/service-bus/resources/.

Objective: Demonstrate the priority-based mediation capability of ESB.

<definitions xmlns="http://ws.apache.org/ns/synapse">
    <priority-executor name="exec">
        <queues>
            <queue size="100" priority="1"/>
            <queue size="100" priority="10"/>
        </queues>
    </priority-executor>
    <proxy name="StockQuoteProxy">
        <target>
            <inSequence>
                <filter source="$trp:priority" regex="1">
                    <then>
                        <enqueue priority="1" sequence="priority_sequence" executor="exec"/>
                    </then>
                    <else>
                        <enqueue priority="10" sequence="priority_sequence" executor="exec"/>
                    </else>
                </filter>
            </inSequence>
            <outSequence>
                <send/>
            </outSequence>
        </target>
        <publishWSDL uri="file:samples/service-bus/resources/proxy/sample_proxy_1.wsdl"/>
    </proxy>
    <sequence name="priority_sequence">
        <log level="full"/>
        <send>
            <endpoint>
                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
        </send>
    </sequence>
</definitions>
Prerequisites
  • Deploy the SimpleStockQuoteService in sample Axis2 server and start it on port 9000. Priority is applied only when ESB is loaded with enough messages to consume its core number of threads. So to observe the priority based mediation it is required to use a load testing tool like JMeter, SOAP UI or Apache bench.
  • Start ESB with the sample configuration 652: wso2esb-samples.sh -sn 652

In this sample, client should send a HTTP header that specifies the priority of the message. This header name is "priority". This header is retrieved in the ESB configuration using the $trp:priority XPath expression. Then it is matched against the value 1. If it has the value 1, message is executed with priority 1. Otherwise the message is executed with priority 10.

Here are two sample XML files that can be used to invoke the service using a tool like JMeter or Ab. For SOAP user interface, the user can use the <EI_HOME>/samples/service-bus/resources/proxy/sample_proxy_1.wsdl file to create the request. The only difference between the two requests demonstrated here is the symbol. One has the symbol as IBM and other has MSFT. For one type of request set the priority header to 1 and for the next set the priority header to 10. Then load ESB with high volume of traffic from both types of requests using the load testing tool. It prints the symbol of the incoming requests in the back end server. User should be able to see more of high priority symbol.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:To>http://localhost:8281/services/SimpleStockQuoteService</wsa:To>
        <wsa:MessageID>urn:uuid:1B57D0B0BF770678DE1261165228620</wsa:MessageID>
        <wsa:Action>urn:getQuote</wsa:Action>
     </soapenv:Header>
     <soapenv:Body>
        <m0:getQuote xmlns:m0="http://services.samples">
           <m0:request>
              <m0:symbol>IBM</m0:symbol>
           </m0:request>
        </m0:getQuote>
     </soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:To>http://localhost:8281/services/SimpleStockQuoteService</wsa:To>
        <wsa:MessageID>urn:uuid:1B57D0B0BF770678DE1261165228620</wsa:MessageID>
        <wsa:Action>urn:getQuote</wsa:Action>
     </soapenv:Header>
     <soapenv:Body>
        <m0:getQuote xmlns:m0="http://services.samples">
           <m0:request>
              <m0:symbol>MSFT</m0:symbol>
           </m0:request>
        </m0:getQuote>
     </soapenv:Body>
</soapenv:Envelope>