This section describes how to configure WSO2 ESB to listen to a JMS Queuequeue.
Follow
The following sections walk you through the steps below to configure WSO2 the ESB to listen to a JMS queue, consume messages, and send them the messages to a HTTP backback-end service.
Table of Contents | ||||
---|---|---|---|---|
|
Prerequisites
- Configure WSO2 ESB with Apache ActiveMQ, and set up the JMS listener. For instructions,
...
- see Configure with ActiveMQ.
- Start the ESB server.
Anchor | ||||
---|---|---|---|---|
|
Configuring the sample
Create a proxy service with the following configuration.
...
For information on how to create a proxy service
...
, see
...
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
...
Tip The
OUT_ONLY
property is set totrue
to indicate that message exchange is one-way.You can make the proxy service a JMS listener by setting
...
the transport as
jms
. Once the JMS transport is enabled for a proxy service, the ESB
...
starts listening on a JMS queue with the same name as the proxy service.
...
If you take a look at the sample configuration above,
...
the ESB 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.
...
Testing the sample
To test this sample, you
...
need an HTTP back-end service.
...
Let's use the SimpleStockQuoteService
as the back-end service and test the sample.
- Follow the steps below to build and deploy the
SimpleStockQuoteService
:- Open a command prompt (or a shell in Linux) and go to the
<ESB_HOME>/samples/axis2Server/src/SimpleStockQuoteService
directory. Run
ant
.
- Open a command prompt (or a shell in Linux) and go to the
Follow the steps below to start the Axis2 server:
Place- Open a command prompt (or a shell in Linux) and go to the
<ESB_HOME>/samples/axis2Server
directory. - Execute one of the following commands
- On Windows:
axis2server.bat
- On Linux/Solaris:
./axis2server.sh
- Open a command prompt (or a shell in Linux) and go to the
Send a message into to the ActiveMQ queue by executing the following command from the
<ESB_HOME>/samples/axis2Client
folder directory.
ESB will read the message from the ActiveMQ queue and send it to the back-end service.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"
Analyzing the output
You will see the following response
...
on the Axis2 Server console:
Code Block | ||
---|---|---|
| ||
Fri Dec 16 10:21:11 GST 2016 samples.services.SimpleStockQuoteService :: Accepted order #1 for : 7424 stocks of IBM at $ 156.74347214873563 |
By analyzing the output you can understand that the ESB has read the message from the ActiveMQ queue and sent it to the back-end service.
Two-way HTTP
...
back-end
...
call
In addition to one-way invocations, WSO2 an 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 sending a request message to a JMS queue. The scenario is depicted two-way HTTP call is illustrated in the diagram below.:
...
You can have a proxy service similar to the following to simulate
...
two-way invocation
...
:
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> |
Info |
---|
...
|
...
In two-way JMS scenarios the |
...
Execute the following command from the |
...
directory.
You can view the responses from the back-end service in the |
...
via http://0.0.0.0:8161/admin , and using |
...
Defining
...
the content type of incoming JMS messages
By default, WSO2 ESB considers all messages consumed from a queue as a SOAP message. To consider accept messages consumed from a queue as in 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 To define the content type of incoming JMS messages, you can modify the proxy service that you created above 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> |
Anchor | ||||
---|---|---|---|---|
|
Tip | ||
---|---|---|
| ||
You can specify a different content type within the If you want the proxy service to listen to a queue where the queue name is different from the proxy service name, you can specify the queue name using the |