Versions Compared

Key

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

...

There are many business use cases that can be implemented using the publisher-subscriber (pub-sub) pattern. For example, consider a blog with subscribed readers. The blog author posts a blog entry , which that the subscribers of that the blog can view. In other words, the blog author publishes a message (the blog post content) and the subscribers (the blog readers) receive that message. Popular publisher/subscriber patterns like these can be implemented using JMS topics , as described in the following sections.:

Table of Contents
maxLevel3
minLevel3

Scenario overview

In this sample scenario, we you create a JMS Topic topic in a broker server such as ActiveMQ or the EI-Broker runtime Message Broker Profile of WSO2 Enterprise Integrator (WSO2 EI), and then you add proxy services that using the ESB Profile of WSO2 EI to act as the publisher and subscribers in WSO2 EI. This example assumes you have already downloaded and installed the ESB Profile of WSO2 EI (see Installation Guide).

...

Configuring the broker server

For this example, we you will use ActiveMQ as our the broker server. Follow the instructions in Configure with ActiveMQ to set up ActiveMQ for use with the ESB Profile of WSO2 EI with ActiveMQ as the broker.

Configuring the publisher

  1. Open the <ESB<EI_HOME>/repository/conf/JNDI.properties file and specify the JNDI designation of the topic (in this example , it is 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 via the Management Console of the ESB Profile or by copying the XML configuration into the source view. Alternatively, you can add an XML file named StockQuoteProxy.xml to <ESBthe <EI_HOME>/repository/deployment/server/synapse-configs/default/proxy-services. A sample XML code segment that defines the proxy service is given below. Notice You will see that the address URI specifies properties for configuring to configure the JMS transport.

    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 Management Console 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 <EI_HOME>/repository/deployment/server/synapse-configs/default/proxy-services directory, use '&' instead.

Configuring the subscribers

Next, you need to configure two proxy services that subscribe to the JMS topic SimpleStockQuoteService, so that whenever this the topic receives a message, it is sent to these the subscribing proxy services. Following is the sample configuration for these the 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 Open a command prompt (or a shell in Linux), go to the <EI_HOME>\bin directory and execute one of the following commands :

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

  3. <ESB_HOME>/bin/wso2server.bat (on Windows)

    to start the ESB Profile of WSO2 EI:

    • On Windows:integrator.bat --run
    • On Linux/Mac OS:sh integrator.sh

  4. 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
  5. To invoke the publisher, use the sample stockquote stock quote client service by navigating to <ESBthe <EI_HOME>/samples/axis2Client directory 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:

...