...
Figure 1: Composed Msg. Processor EIP
Example
...
scenario
This example scenario demonstrates splitting a message into several requests, which are then routed to different servers, merged together, and sent back to the client. In this scenario, each server instance acts as an inventory controller. The user can have multiple requests in a single request message. The Iterate Mediator processes the request message and splits it. The ESB identifies the request content using the Switch mediator, and decides the routing destination. The Send mediator then sends the request message to the respective location (endpoint). The response, which will be sent from different endpoints, will be merged together using the Aggregate mediator of the ESB before sending back to the client.
...
Getting Started
The diagram below depicts how to simulate the example scenario using WSO2 ESB.
...
Figure 1: Composed Msg. Processor EIP | Figure 2: Composed Msg. Processor Example Scenario |
---|---|
New Order | Stock Quote Request |
Splitter | |
Router | Switch Mediator |
Widget/Gadget Inventory | Stock Quote Service Instance |
Aggregator | |
Validated Order | Aggregated Stock Quote Response |
Environment
Set upsetup
...
- Download an install the WSO2 ESB from http://wso2.com/products/enterprise-service-bus. For a list of prerequisites and step-by-step installation instructions, refer to Getting Started in the WSO2 ESB documentation.
...
- Start two Sample Axis2 server instances in ports 9000 and 9001. For instructions, refer to section ESB Samples Setup - Starting Sample Back-End Services in the WSO2 ESB documentation.
ESB
...
configuration
3. Start the ESB server and log into its management console UI (https:
//localhost:9443/carbon
). In the management console, navigate to Main Menu, click Service Bus and then Source View. Next, copy and paste the following configuration, which helps you explore the example scenario, to the source view. Anchor step3 step3
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://ws.apache.org/ns/synapse"> <proxy name="ComposedMessageProxy" startOnLoad="true"> <target> <inSequence> <log level="full"/> <iterate xmlns:m0="http://services.samples" preservePayload="true" attachPath="//m0:getQuote" expression="//m0:getQuote/m0:request"> <target> <sequence> <switch xmlns:m1="http://services.samples/xsd" source="//m1:symbol"> <case regex="IBM"> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </case> <case regex="WSO2"> <send> <endpoint> <address uri="http://localhost:9001/services/SimpleStockQuoteService"/> </endpoint> </send> </case> <default> <drop/> </default> </switch> </sequence> </target> </iterate> </inSequence> <outSequence> <aggregate> <completeCondition> <messageCount/> </completeCondition> <onComplete xmlns:m0="http://services.samples" expression="//m0:getQuoteResponse"> <send/> </onComplete> </aggregate> </outSequence> </target> <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/> </proxy> <sequence name="fault"> <log level="full"> <property name="MESSAGE" value="Executing default "fault" sequence"/> <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/> <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/> </log> <drop/> </sequence> <sequence name="main"> <log/> <drop/> </sequence> </definitions> |
Simulating the
...
sample scenario
4. Send the following request using a tool similar to SOAP UI.
...
Note that the three responses are merged together.
How the
...
implementation works
Let's investigate the elements of the ESB configuration in detail. The line numbers below are mapped with the ESB configuration illustrated in step 3 above.
- iterate [line 7 in ESB config] - The iterate mediator takes each child element of the element specified in its xPath expression, and applies the sequence flow inside the iterator mediator. In this example, it takes each getQuote request specified in the incoming request to the ESB, and forwards this request to the target endpoint.
- switch [line 13 in ESB config] - Observes the message and filters out the message content to the given xPath expression.
- case [line 14 in ESB config] - The filtered content will be tallied with the given regular expression.
- send [line 15 in ESB config] - When a matching case is found, the send will route the message to a specified endpoint indicated in address uri.
- aggregate [line 37 in ESB config] - The Aggregate mediator aggregates response messages for requests made by the Iterate or Clone mediators. The completion condition specifies the minimum or maximum number of messages to be collected. When all messages are aggregated, the sequence inside
onComplete
is run.
...
hidden | true |
---|
...