The producer template also provides the option of processing the reply message in the same sub-thread that is used to invoke the producer endpoint. In this case, you provide a callback object, which automatically gets invoked in the sub-thread as soon as the reply message is received. In other words, the asynchronous send with callback methods enable you to initiate an invocation in your main thread and then have all of the associated processing—invocation of the producer endpoint, waiting for a reply and processing the reply—occur asynchronously in a sub-thread.
The basic asyncCallback()
method takes an Exchange
argument and invokes an endpoint asynchronously, using the message exchange
pattern (MEP) of the specified exchange. This method is similar to the
asyncSend()
method for exchanges, except that it takes an
additional org.apache.camel.spi.Synchronization
argument, which is
a callback interface with two methods: onComplete()
and
onFailure()
. For details of how to use the
Synchronization
callback, see Asynchronous invocation with a callback.
The following asyncCallback()
methods let you specify the target
endpoint in one of the following ways: as an endpoint URI, or as an
Endpoint
object.
Future<Exchange> asyncCallback( String endpointUri, Exchange exchange, Synchronization onCompletion ); Future<Exchange> asyncCallback( Endpoint endpoint, Exchange exchange, Synchronization onCompletion );
The asyncCallback()
method for processors calls a processor to
populate a default exchange and forces the message exchange pattern to be
InOut (so that the invocation obeys request/reply
semantics).
The following asyncCallback()
methods let you specify the target
endpoint in one of the following ways: as an endpoint URI, or as an
Endpoint
object.
Future<Exchange> asyncCallback( String endpointUri, Processor processor, Synchronization onCompletion ); Future<Exchange> asyncCallback( Endpoint endpoint, Processor processor, Synchronization onCompletion );
If you are only concerned with the contents of the message body that you want
to send, you can use the asyncCallbackSendBody()
methods to send a
message body asynchronously and let the producer template take care of inserting
the body into a default exchange object.
The asyncCallbackSendBody()
methods let you specify the target
endpoint in one of the following ways: as an endpoint URI, or as an
Endpoint
object.
Future<Object> asyncCallbackSendBody( String endpointUri, Object body, Synchronization onCompletion ); Future<Object> asyncCallbackSendBody( Endpoint endpoint, Object body, Synchronization onCompletion );
If you are only concerned with the contents of the message body in the request
and in the reply, you can use the asyncCallbackRequestBody()
methods to provide the request message body as an argument and let the producer
template take care of inserting the body into a default exchange object.
The asyncCallbackRequestBody()
methods let you specify the target
endpoint in one of the following ways: as an endpoint URI, or as an
Endpoint
object.
Future<Object> asyncCallbackRequestBody( String endpointUri, Object body, Synchronization onCompletion ); Future<Object> asyncCallbackRequestBody( Endpoint endpoint, Object body, Synchronization onCompletion );