Sample 381: Class Mediator to CBR Binary Messages
Objective: Demonstrate on CBR a message with binary payload
<definitions xmlns="http://ws.apache.org/ns/synapse"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">
<proxy name="JMSBinaryProxy" transports="jms">
<target inSequence="BINARY_CBR_SEQ"/>
</proxy>
<sequence name="BINARY_CBR_SEQ">
<in>
<log level="full"/>
<property action="set" name="OUT_ONLY" value="true"/>
<class name="samples.mediators.BinaryExtractMediator">
<property name="offset" value="11"/>
<property name="length" value="4"/>
<property name="variableName" value="symbol"/>
<property name="binaryEncoding" value="utf-8"/>
</class>
<log level="custom">
<property name="symbol" expression="get-property('symbol')"/>
</log>
<switch source="get-property('symbol')">
<case regex="GOOG">
<send>
<endpoint>
<address
uri="jms:/dynamicTopics/mdd.GOOG?transport.jms.ConnectionFactoryJNDIName=TopicConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=topic"/>
</endpoint>
</send>
</case>
<case regex="MSFT">
<send>
<endpoint>
<address
uri="jms:/dynamicTopics/mdd.MSFT?transport.jms.ConnectionFactoryJNDIName=TopicConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=topic"/>
</endpoint>
</send>
</case>
<default/>
</switch>
</in>
</sequence>
</definitions>Prerequisites:
Make sure the synapse-samples-1.0.jar is in your class path (by default this jar is placed in the lib directory when installing Synapse)
Configure the JMS transport using ActiveMQ as described in Setting Up the ESB Samples.
Start ESB with the sample configuration 381 (i.e. wso2esb-samples -sn 381)
Start the sample Axis2 server and deploy the SimpleStockQuoteService.
In this configuration, a proxy has configured to accept incoming JMS messages. JMS messages contains a binary payload. User configure the offset, length, binary encoding of the text literal that it need to use for CBR. And a variable name to set the decoded value as a property. Configuration simply route the messages based on the text to different endpoints.
A JMS producer and two instances of a consumer used to demonstrate the CBR functionality.
Now run the first consumer using the following command.
ant mddconsumer -Djms_topic=mdd.MSFTNow run the second consumer using the following command.
ant mddconsumer -Djms_topic=mdd.GOOGSo, now both consumers are ready to listen the topic. Run the market data producer to genenrate market data for symbol 'MSFT' using the following command.
ant mddproducer -Dsymbol=MSFTNow run the market data producer to genenrate market data for symbol 'GOOG' using the following command.
ant mddproducer -Dsymbol=GOOGYou will see the below output in the client console(s) based on the symbol.
mddconsumer:
[java] Market data recived for symbol : topic://mdd.MSFT
[java] Market data recived for symbol : topic://mdd.MSFT