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.MSFT
Now run the second consumer using the following command.
ant mddconsumer -Djms_topic=mdd.GOOG
So, 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=MSFT
Now run the market data producer to genenrate market data for symbol 'GOOG' using the following command.
ant mddproducer -Dsymbol=GOOG
You 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