Store and Forward Messaging patterns with Message Stores and Message Processors

Message Stores and Message Processors can be used to implement different store and forward messaging patterns. This can be use to cater different SLA s and other QoS aspects.

Sample 700: Introduction to Message Store

            <!-- Introduction to the  Message Store -->
            <definitions xmlns="http://ws.apache.org/ns/synapse">
            <sequence name="fault">
            <log level="full">
            <property name="MESSAGE" value="Executing default 'fault' sequence"/>
            <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
            <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
            </log>
            <drop/>
            </sequence>
            <sequence name="onStoreSequence">
            <log>
            <property name="On-Store" value="Storing message"/>
            </log>
            </sequence>
            <sequence name="main">
            <in>
            <log level="full"/>
            <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
            <store messageStore="MyStore" sequence="onStoreSequence"/>
            </in>
            <description>The main sequence for the message mediation</description>
            </sequence>
            <messageStore name="MyStore"/>
            </definitions>
        

Objective: Introduction to Message Stores

Prerequisites:
Start the configuration numbered 700: i.e. wso2esb-samples -sn 700

To Execute the Client :

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dmode=placeorder
    

When you execute the client the message will be dispatched to the main sequence. In the Main sequence store mediator will store the placeOrder request message in the "MyStore" Message Store

Before Storing the message store mediator will invoke the sequence :onStoreSequence. See the log

INFO - LogMediator To: http://localhost:9000/services/SimpleStockQuoteService, WSAction: urn:placeOrder, SOAPAction: urn:placeOrder, ReplyTo: http://www.w3.org/2005/08/addressing/none, MessageID: urn:uuid:54f0e7c6-7b43-437c-837e-a825d819688c, Direction: request, On-Store = Storing message

You can then use the JMX view of Synapse Message Store by using the jconsole and view the stored Messages and delete them.

Sample 701: Introduction to Message Sampling Processor

            <!-- Introduction to  Message Sampling Processor -->

            <definitions xmlns="http://ws.apache.org/ns/synapse">

            <sequence name="send_seq">
            <send>
            <endpoint>
            <address uri="http://localhost:9000/services/SimpleStockQuoteService">
            <suspendOnFailure>
            <errorCodes>-1</errorCodes>
            <progressionFactor>1.0</progressionFactor>
            </suspendOnFailure>
            </address>
            </endpoint>
            </send>
            </sequence>
            <sequence name="main">
            <in>
            <log level="full"/>
            <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
            <property name="OUT_ONLY" value="true"/>
            <store messageStore="MyStore"/>
            </in>
            <description>The main sequence for the message mediation</description>
            </sequence>
            <messageStore name="MyStore"/>
            <messageProcessor
            class="org.apache.synapse.message.processors.sampler.SamplingProcessor"
            name="SamplingProcessor" messageStore="MyStore">
            <parameter name="interval">20000</parameter>
            <parameter name="sequence">send_seq</parameter>
            </messageProcessor>
            </definitions>
        

Objective:Introduction to Message Sampling Processor

Prerequisites:
Start the configuration numbered 701: i.e. wso2esb-samples -sn 701

Start the SimpleStockQuoteService if its not already started

To Execute the Client few times:

ant stockquote
            -Daddurl=http://localhost:9000/services/SimpleStockQuoteService
            -Dtrpurl=http://localhost:8280/ -Dmode=placeorder
        

When you execute the client the message will be dispatched to the main sequence. In the Main sequence store mediator will store the placeOrder request message in the "MyStore" Message Store

Message Processor will consume the messages and forward to the send_seq sequence in configured rate.

You will observe that service invocation rate is not changing when increasing the rate we execute the client.

Sample 702: Introduction to Message Forwarding Processor


            <!-- Introduction to Scheduled Message Forwarding Processor -->

            <definitions xmlns="http://ws.apache.org/ns/synapse">

            <endpoint name="StockQuoteServiceEp">
            <address uri="http://localhost:9000/services/SimpleStockQuoteService">
            <suspendOnFailure>
            <errorCodes>-1</errorCodes>
            <progressionFactor>1.0</progressionFactor>
            </suspendOnFailure>
            </address>
            </endpoint>
            <sequence name="fault">
            <log level="full">
            <property name="MESSAGE" value="Executing default 'fault' sequence"/>
            <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
            <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
            </log>
            <drop/>
            </sequence>
            <sequence name="main">
            <in>
            <log level="full"/>
            <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
            <property name="OUT_ONLY" value="true"/>
            <property name="target.endpoint" value="StockQuoteServiceEp"/>
            <store messageStore="MyStore"/>
            </in>
            <description>The main sequence for the message mediation</description>
            </sequence>
            <messageStore name="MyStore"/>
            <messageProcessor
            class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor"
            name="ScheduledProcessor" messageStore="MyStore">
            <parameter name="interval">10000</parameter>
            </messageProcessor>
            </definitions>
        

Objective:Introduction to Message Forwarding Processor

Prerequisites:
Start the configuration numbered 702: i.e. wso2esb-samples -sn 702

To Execute the Client:

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dmode=placeorder

Now Start the SimpleStockQuoteService

When you Start the service you will see message getting delivered to the service. Even though service is down when we invoke it from the client

Here in the Main sequence store mediator will store the placeOrder request message in the "MyStore" Message Store

Message Processor will send the message to the endpoint configured as a message context property.

Message processor will remove the message from the store only if message delivered successfully