Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

JMS supports two models for messaging as follows:  

...

Configuring the publisher

  1. Open the <ESB_HOME>/repository/conf/JNDI.properties file and specify the JNDI designation of the topic (in this example, SimpleStockQuoteService). For example:

    Code Block
    # register some queues in JNDI using the form
    # queue.[jndiName] = [physicalName]
    queue.MyQueue = example.MyQueue
     
    # register some topics in JNDI using the form
    # topic.[jndiName] = [physicalName]
    topic.MyTopic = example.MyTopic
    topic.SimpleStockQuoteService = SimpleStockQuoteService

     

  2.  Next, add a proxy service named StockQuoteProxy and configure it to publish to the topic SimpleStockQuoteService. You can add the proxy service to the ESB using the management console, either by building the proxy service in the design view or by copying the XML configuration into the source view. Alternatively, you can add an XML file named StockQuoteProxy.xml to <ESB_HOME>/repository/deployment/server/synapse-configs/default/proxy-services. A sample XML code segment that defines the proxy service is given below.  

    Code Block
    languagehtml/xml
    <definitions xmlns="http://ws.apache.org/ns/synapse">
       <proxy name="StockQuoteProxy"
              transports="http"
              startOnLoad="true"
              trace="disable">
          <target>
             <endpoint>
    
                <address 
    uri="jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=TopicConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=topic"/>
             </endpoint>
             <inSequence>
                <property name="OUT_ONLY" value="true"/>
             </inSequence>
             <outSequence>
                <send/>
             </outSequence>
          </target>
       </proxy>
    </definitions>
    Info

    If you are using the source view in the management console, you must use '&amp;' instead of '&' in endpoint URLs, as shown in the example above. If you are saving this proxy service configuration as an XML file in the proxy-services directory, use '&' instead.  

     

Configuring the subscribers

Next, you configure two proxy services that subscribe to the JMS topic SimpleStockQuoteService, so that whenever this topic receives a message, it is sent to these subscribing proxy services. Following is the sample configuration for these proxy services.

Code Block
languagehtml/xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
    <proxy name="SimpleStockQuoteService1"
          transports="jms"
          startOnLoad="true"
          trace="disable">
      <description/>
      <target>
         <inSequence>
            <property name="OUT_ONLY" value="true"/>
            <log level="custom">
               <property name="Subscriber1" value="I am Subscriber1"/>
            </log>
            <drop/>
         </inSequence>
         <outSequence>
            <send/>
         </outSequence>
      </target>
      <parameter name="transport.jms.ContentType">
         <rules>
            <jmsProperty>contentType</jmsProperty>
            <default>application/xml</default>
         </rules>
      </parameter>
      <parameter name="transport.jms.ConnectionFactory">myTopicConnectionFactory</parameter>
      <parameter name="transport.jms.DestinationType">topic</parameter>
      <parameter name="transport.jms.Destination">SimpleStockQuoteService</parameter>
   </proxy>

   <proxy name="SimpleStockQuoteService2"
          transports="jms"
          startOnLoad="true"
          trace="disable">
      <description/>
      <target>
         <inSequence>
            <property name="OUT_ONLY" value="true"/>
            <log level="custom">
               <property name="Subscriber2" value="I am Subscriber2"/>
            </log>
            <drop/>
         </inSequence>
         <outSequence>
            <send/>
         </outSequence>
      </target>
      <parameter name="transport.jms.ContentType">
         <rules>
            <jmsProperty>contentType</jmsProperty>
            <default>application/xml</default>
         </rules>
      </parameter>
      <parameter name="transport.jms.ConnectionFactory">myTopicConnectionFactory</parameter>
      <parameter name="transport.jms.DestinationType">topic</parameter>
      <parameter name="transport.jms.Destination">SimpleStockQuoteService</parameter>
   </proxy>
</definitions>

Publishing to the topic

  1. Start the ESB with one of the following commands:

    • <ESB_HOME>/bin/wso2server.sh (on Linux) 

    • <MB_HOME>/bin/wso2server.bat (on Windows)

    A log message similar to the following will appear:

    Code Block
    INFO {org.wso2.andes.server.store.CassandraMessageStore} -  Created Topic : SimpleStockQuoteService
    INFO {org.wso2.andes.server.store.CassandraMessageStore} -  Registered Subscription tmp_127_0_0_1_44759_1 for Topic SimpleStockQuoteService
  2. To invoke the publisher, use the sample stockquote client service by navigating to <ESB_HOME>/samples/axis2Client and running the following command: 

    Code Block
    ant stockquote -Daddurl=http://localhost:8280/services/StockQuoteProxy -Dmode=placeorder -Dsymbol=MSFT 

    The message flow is executed as follows:

    • When the stockquote client sends the message to the StockQuoteProxy service, the publisher is invoked and sends the message to the JMS topic.

    • The topic delivers the message to all the subscribers of that topic. In this case, the subscribers are ESB proxy services.  
Info
There There can be many types of publishers and subscribers for a given JMS topic. The following article in the WSO2 library provides more information on different types of publishers and subscribers: http://wso2.org/library/articles/2011/12/wso2-esb-example-pubsub-soa.