Send Mediator¶
The Send Mediator is used to send messages out of Synapse to an endpoint. The Send Mediator also copies any message context properties from the current message context to the reply message received on the execution of the send operation, so that the response could be correlated back to the request. Messages may be correlated by WS-A MessageID, or even simple custom text labels.
Info
- A send operation can be blocking or non-blocking depending on the actual transport implementation used. The default NIO-based http/s implementation does not block on a send. Therefore, if a message should be sent and further processed (e.g. transformed) afterwards, it is required to clone the message into two copies and then perform the processing to avoid conflicts.
- Do not add any mediator configurations after Send mediator in the same sequence, because the Micro Integrator does not process them. Any mediator configuration after the Send mediator should go to the outSequence or receive sequence.
Syntax¶
<send/>
If the message is to be sent to one or more endpoints, use the following syntax:
<send>
(endpointref | endpoint)+
</send>
- The
endpointref
token refers to the following:<endpoint key="name"/>
- The
endpoint
token refers to an anonymous endpoint definition.
Configuration¶
Parameter Name | Description |
---|---|
Select Endpoint Type | This parameter is used to specify the endpoint type to which the message should be sent. The available options are as follows.
|
Receiving Sequence Type | The sequence to use for handling the response from the endpoint. Possible options are as follows.
|
Build Message Before Sending | This parameter is used to specify whether the message should be built before sending or not. The possible values are as follows.
|
Examples¶
Send mediator used in the In sequence and Out sequence¶
In this example, the proxy service forwards the incoming requests to an endpoint and sends the response back to the client. The inSequence handles the incoming messages by sending them to the specified endpoint, and the Respond mediator ensures that the responses are returned to the client.
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="SimpleProxy" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<send>
<endpoint key="SimpleStockQuoteServiceEP"/>
</send>
<respond/>
</inSequence>
<faultSequence/>
</target>
</proxy>
Specifying a response handling sequence (service chaining)¶
<send receive="personInfoSeq">
<endpoint key="PersonInfoEpr"/>
</send>
In this example, requests are sent to the PersonInfoEpr
endpoint, and responses from the
service at that endpoint are handled by a sequence named personInfoSeq
.
This approach is particularly useful for service chaining. For example, if you want to take the responses from the PersonInfoEpr
service and send them to the
CreditEpr
service for additional processing before sending the final response back to the client.
In this case, you can configure the personInfoSeq
sequence to send the response to the CreditEpr
service and also specify
another receive sequence named creditSeq
that sends the response from the CreditEpr
service back to the client.
Following is the configuration of these sequences.
<sequence name="personInfoSeq">
<xslt key="xslt">
<property name="amount" expression="get-property('ORG_AMOUNT')"/>
</xslt>
<send receive="creditSeq">
<endpoint key="CreditEpr"/>
</send>
</sequence>
<sequence name="creditSeq">
<log level="full"/>
<send/>
</sequence>
Configuring a blocking/non-blocking send operation¶
In this example, the Send mediator in a proxy service using the VFS transport is transferring a file to a VFS endpoint. VFS is a non-blocking transport by default, which means a new thread is spawned for each outgoing message. The Property mediator added before the Send mediator removes the ClientAPINonBlocking property from the message to perform the mediation in a single thread. This is required when the file being transferred is large, and you want to avoid out-of-memory failures.
<inSequence>
<property name="ClientApiNonBlocking"
value="true"
scope="axis2"
action="remove"/>
<send>
<endpoint name="FileEpr">
<address uri="vfs:file:////home/shammi/file-out"/>
</endpoint>
</send>
</inSequence>