Sample 13: Dual Channel Invocations Through Synapse

<definitions xmlns=""> <sequence name="main"> <!-- log all attributes of messages passing through --> <log level="full"/> <!-- Send the message to implicit destination --> <send/> <sequence/> </definitions>


Demonstrate the ability to perform dual channel invocations through Synapse (asynchronous notification).


  • Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
  • This sample makes use of the configuration used in sample 0. So start Synapse using the configuration numbered 0 (repository/conf/sample/synapse_sample_0.xml)
    Unix/Linux: sh -sample 0
    Windows: synapse.bat -sample 0

Executing the Client

Execute the client as follows.

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/

This example invokes the same 'getQuote' operation on the SimpleStockQuoteService using the custom client which uses the Axis2 ServiceClient API with useSeparateListener set to 'true', so that the response is coming through a different channel than the one which is used to send the request. Note the following log thrown out by the sample client.

Response received to the callback Standard dual channel :: Stock price = $57.16686934968289

If you send your client request through TCPmon, you will notice that Synapse replies to the client with a HTTP 202 acknowledgment when you send the request and the communication between Synapse and the server happens on a single channel and then you get the response back from Synapse to the client callback in a different channel (which cannot be observed through TCPmon).

Also you could see the wsa:Reply-To header being something like http://localhost:8200/axis2/services/anonService2 which implies that the reply is gpoing on a different channel listening on the port 8200. Please note that it is required to engage addressing when using the dual channel invocation because it requires the wsa:Reply-To header.

Back to Catalog