This section describes how to configure WSO2 ESB Enterprise Integrator (WSO2 EI) to listen to a JMS Queue.
...
Follow the steps below to configure WSO2 ESB EI to listen to a JMS queue, consume messages, and send them to a HTTP back-end service.
Configure WSO2 ESB EI with Apache ActiveMQ and set up the JMS listener. For instructions, see Configure with ActiveMQ.
Anchor sample sample Create a proxy service with the following configuration.To create a proxy service using ESB Tooling, see Working with Proxy Services via ESB Tooling.
Code Block language xml <proxy xmlns="http://ws.apache.org/ns/synapse" name="JMStoHTTPStockQuoteProxy" transports="jms"> <target> <inSequence> <property action="set" name="OUT_ONLY" value="true"/> </inSequence> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> <outSequence> <send/> </outSequence> </target> </proxy>
Tip title Proxy Service Configuration The
OUT_ONLY
property is set to true to indicate that message exchange is one-way.You can make the proxy service a JMS listener by setting its transport as
jms
. Once the JMS transport is enabled for a proxy service, ESB WSO2 EI will start listening on a JMS queue with the same name as the proxy service.In the sample configuration above, ESB WSO2 EI listens to a JMS queue named
JMStoHTTPStockQuoteProxy
. To make the proxy service listen to a different JMS queue, define thetransport.jms.Destination
parameter with the name of the destination queue. For details, see below.- To test this you will need an HTTP back-end service. Deploy the SimpleStockQuoteService and start the Axis2 server.
Place a message into the ActiveMQ queue by executing the following command from
<ESB<EI_HOME>/samples/axis2Client
folder.Code Block language xml ant stockquote -Dmode=placeorder -Dtrpurl="jms:/JMStoHTTPStockQuoteProxy?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.ContentTypeProperty=Content-Type&transport.jms.DestinationType=queue"
ESB will read the message from the ActiveMQ queue and send it to the back-end service. You will see the following response in the Axis2 Server console:
Code Block language xml Fri Dec 16 10:21:11 GST 2016 samples.services.SimpleStockQuoteService :: Accepted order #1 for : 7424 stocks of IBM at $ 156.74347214873563
Two-way HTTP Back-end Call
In addition to one-way invocations, WSO2 ESB proxy service can listen to the queue, pick up a message and do a two-way HTTP call as well. It allows the response to be delivered to a queue specified by the client. This is done by specifying a ReplyDestination
element when placing a request message to a JMS queue. The scenario is depicted in the diagram below.
...
Code Block | ||
---|---|---|
| ||
<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy1" transports="jms" startOnLoad="true" trace="disable"> <description/> <target> <inSequence> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </inSequence> <outSequence> <send/> </outSequence> </target> <parameter name="transport.jms.ContentType"> <rules> <jmsProperty>contentType</jmsProperty> <default>text/xml</default> </rules> </parameter> </proxy> |
Tip | |||||
---|---|---|---|---|---|
Note that for two-way JMS scenarios the Use the following command from
You can view the responses from the back-end service in |
Defining Content Type of Incoming JMS Messages
By default, WSO2 ESB considers all messages consumed from a queue as a SOAP message. To consider messages consumed from a queue as a different format, define the transport.jms.ContentType parameter with the respective content type as a proxy service parameter.
To demonstrate this, we have modified the above configuration as follows:
Code Block |
---|
<proxy xmlns="http://ws.apache.org/ns/synapse" name="JMStoHTTPStockQuoteProxy" transports="jms"> <target> <inSequence> <property action="set" name="OUT_ONLY" value="true"/> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </inSequence> <outSequence> <send/> </outSequence> </target> <parameter name="transport.jms.ContentType"> <rules> <jmsProperty>contentType</jmsProperty> <default>application/xml</default> </rules> </parameter> <parameter name="transport.jms.Destination">MyJMSQueue</parameter> </proxy> |
...