The content in this documentation is for older versions of WSO2 products. For updated information on Enterprise Integration Patterns, go to the latest Micro Integrator documentation. "> The content in this documentation is for older versions of WSO2 products. For updated information on Enterprise Integration Patterns, go to the latest Micro Integrator documentation.

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 43 Next »

This section explains, through an example scenario, how the Point-to-Point Channel EIP can be implemented using the WSO2 ESB. The following topics are covered:

Introduction to Point-to-Point Channel 

The Point-to-Point Channel EIP ensures that only a single receiver consumes a message (when there are multiple receivers waiting to consume the message). For more information, see Point to Point Channel





Figure 1: Point-to-Point Channel EIP

Example scenario

The following diagram depicts an example scenario that is carried out using the ESB. As shown below, there are three instances of the Stock Quote service connected to the ESB as consumers. The client application requests a stock quote from the stock inventory service (Stock Quote service). The ESB receives the messages sent from the client and routes each message to a single consumer (single Stock Quote service instance) at a time.

Figure 2: Example scenario of the Point-to-Point Channel EIP

Before digging into implementation details, let's take a look at the relationship between the example scenario and the Point-to-Point Channel EIP by comparing their core components.

Point-to-Point EIP (Figure 1)Point-to-Point Channel Example Scenario (Figure 2)

Sender

Stock Quote Client

Order

Stock Quote Requests

Point to Point Channel

Load-balance Endpoint

Receiver Three instances of the Stock Quote service

The ESB configuration

Given below is the ESB configuration for simulating the example scenario explained above. 

<definitions xmlns="http://ws.apache.org/ns/synapse">
   <proxy xmlns="http://ws.apache.org/ns/synapse" name="PointToPointProxy" transports="http https" startOnLoad="true" >
       <target>
           <inSequence>
               <send>
                   <endpoint>
                       <!-- Channel With Multiple Endpoints Load Balancer Will Ensure that only one will receive it -->
                       <loadbalance>
                           <endpoint>
                               <address uri="http://localhost:9000/services/SimpleStockQuoteService/" />
                           </endpoint>
                           <endpoint>
                               <address uri="http://localhost:9001/services/SimpleStockQuoteService/" />
                           </endpoint>
                           <endpoint>
                               <address uri="http://localhost:9002/services/SimpleStockQuoteService/" />
                           </endpoint>
                       </loadbalance>
                   </endpoint>
               </send>
           </inSequence>
           <outSequence>
               <respond/>
           </outSequence>
       </target>
   </proxy>
</definitions>

The configuration elements

The elements used in the above ESB configuration are explained below.

  • <proxy> - This is the proxy service that should be invoked to execute the configuration.
  • <inSequence> - A message is first received by the proxy service, and then directed to this sequence.
  • <outSequence> - This sequence is triggered after the execution of the <inSequence>.
  • <send> - When a matching case is found, the Send mediator routes the message to the endpoint indicated by the address URI.
  • <load balance> - Manages the array of services defined within this endpoint. It streams the request only to one instance, which is selected using the given algorithm.
  • <outSequence> - Receives the response from an endpoint and sends the response back to the client.

Simulating the example scenario

Now, let's try out the example scenario explained above.

Setting up the environment

You need to set up the ESB, and the back-end service:

  1. Download the Point-To-Point_1.0.0.zip file, which includes the ESB configuration described above. 
  2. See Setting up the Environment for instructions on setting up the ESB and the back-end service.

    When you set up the environment, note that you need to start three instances of the back-end service (Stock Quote Service) to simulate this example.

Executing the sample

Let's send a request to the ESB using the Stock Quote Client application. Find out more about the Stock Quote Client from the ESB documentation.

  1. Open a new terminal, and navigate to the <ESB_HOME>/samples/axis2Client/ directory. The Stock Quote client application is stored in this directory.
  2. Execute the following command to send the request to the ESB.


    ant stockquote -Dtrpurl=http://localhost:8280/services/point-to-point-proxy -Dsymbol=foo


    The structure of the request should be as follows:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
       <soapenv:Header />
       <soapenv:Body>
            <ser:getQuote>        
             <ser:request>
                 <ser:symbol>foo</ser:symbol>
             </ser:request>      
          </ser:getQuote>
       </soapenv:Body>
    </soapenv:Envelope>

Analyzing the output

Note that, out of all three instances of the Stock Quote service (Axis2 server), only one server acquires the sent request at a given time.

Stock client response: 

Standard :: Stock price = $81.06211284751495

Service console response:

samples.services.SimpleStockQuoteService :: Generating quote for : foo

If you try sending multiple requests, you will notice in the Console logs of each of the Axis2 server instances that the three of them are receiving the message one after another (i.e., in Round Robin pattern).

  • No labels