jdk1.8.0_72
Preconditions: ESB should be started.
Axis2 Server should be started
Axis2 sample client used to publish messages
Situation - Configured a message processor(Scheduled Message Forwarding Processor) which targeting a message store and particular endpoint.
Sample config:
<messageProcessor class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" messageStore="reg" name="storeProce" targetEndpoint="StockQuote"> <parameter name="client.retry.interval">1000</parameter> <parameter name="throttle">false</parameter> <parameter name="max.delivery.attempts">4</parameter> <parameter name="member.count">1</parameter> <parameter name="max.delivery.drop">Enabled</parameter> <parameter name="interval">1000</parameter> <parameter name="message.processor.deactivate.sequence">fault</parameter> <parameter name="is.active">true</parameter> <parameter name="target.endpoint">StockQuote</parameter> </messageProcessor>
Store mediator created as follows:
<?xml version="1.0" encoding="UTF-8"?> <sequence name="onstoreSeq"> <store messageStore="reg" sequence="conf:/registrySeq" /> </sequence>
Then created a proxy and used Sample axis2Client ($ESB_HOME/samples/axis2Client/) to invoke proxy. Synapse config can find below[1]
axis2Client Command:
ant stockquote -Daddurl=http://localhost:8280/services/regProxy -Dmode=placeorder - Dsymbol=MSFT
Error - When publishing messages, Back end will receive it, But processor retries and give an error as follows:
ERROR - ForwardingService BlockingMessageSender of message processor [storeProce] failed to send message to the endpoint
Analysis - It is about accepting message with different properties. So added property mediators to change message properties related to ESB.
Solution - Add following properties before store mediator as follows:
<?xml version="1.0" encoding="UTF-8"?> <sequence name="onstoreSeq"> <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true" /> <property name="OUT_ONLY" value="true" /> <store messageStore="reg" sequence="conf:/registrySeq" /> </sequence>[1] - Synapse Config
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://ws.apache.org/ns/synapse"> <registry provider="org.wso2.carbon.mediation.registry.WSO2Registry"> <parameter name="cachableDuration">15000</parameter> </registry> <taskManager provider="org.wso2.carbon.mediation.ntask.NTaskTaskManager" /> <proxy name="regProxy" startOnLoad="true" trace="disable" transports="http https"> <description /> <target inSequence="onstoreSeq" /> </proxy> <endpoint name="StockQuote"> <address uri="http://127.0.0.1:9000/services/SimpleStockQuoteService" /> </endpoint> <sequence name="onstoreSeq"> <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true" /> <property name="OUT_ONLY" value="true" /> <store messageStore="reg" sequence="conf:/registrySeq" /> </sequence> <sequence name="fault"> <!-- Log the message at the full log level with the ERROR_MESSAGE and the ERROR_CODE--> <log level="full"> <property name="MESSAGE" value="Executing default 'fault' sequence" /> <property expression="get-property('ERROR_CODE')" name="ERROR_CODE" /> <property expression="get-property('ERROR_MESSAGE')" name="ERROR_MESSAGE" /> </log> <!-- Drops the messages by default if there is a fault --> <drop /> </sequence> <sequence name="main"> <in> <!-- Log all messages passing through --> <log level="full" /> <filter regex="http://localhost:9000.*" source="get-property('To')"> <!-- Send the messages where they have been sent (i.e. implicit "To" EPR) --> <send /> </filter> </in> <out> <send /> </out> <description>The main sequence for the message mediation</description> </sequence> <messageStore name="reg" /> <messageStore name="InStore" /> <messageProcessor class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" messageStore="reg" name="storeProce" targetEndpoint="StockQuote"> <parameter name="client.retry.interval">1000</parameter> <parameter name="throttle">false</parameter> <parameter name="max.delivery.attempts">4</parameter> <parameter name="member.count">1</parameter> <parameter name="max.delivery.drop">Enabled</parameter> <parameter name="interval">1000</parameter> <parameter name="message.processor.deactivate.sequence">fault</parameter> <parameter name="is.active">true</parameter> <parameter name="target.endpoint">StockQuote</parameter> </messageProcessor> <!-- You can add any flat sequences, endpoints, etc.. to this synapse.xml file if you do *not* want to keep the artifacts in several files --> </definitions>
No comments:
Post a Comment