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.
<!-- 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.
<!-- 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.
<!-- 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