As you will see when the endpoints and their various configuration options are introduced, Spring Integration
provides a foundation for messaging components that enables non-invasive invocation of your application code
from the messaging system. However, sometimes it is necessary to invoke the messaging system
from your application code. For convenience when implementing such use-cases, Spring
Integration provides a MessageChannelTemplate
that supports a variety of operations across
the Message Channels, including request/reply scenarios. For example, it is possible to send a request
and wait for a reply.
MessageChannelTemplate template = new MessageChannelTemplate(); Message reply = template.sendAndReceive(new StringMessage("test"), someChannel);
In that example, a temporary anonymous channel would be created internally by the template. The 'sendTimeout' and 'receiveTimeout' properties may also be set on the template, and other exchange types are also supported.
public boolean send(final Message<?> message, final MessageChannel channel) { ... } public Message<?> sendAndReceive(final Message<?> request, final MessageChannel channel) { .. } public Message<?> receive(final PollableChannel<?> channel) { ... }
Note | |
---|---|
A less invasive approach that allows you to invoke simple interfaces with payload and/or header values instead of Message instances is described in Section 16.2, “GatewayProxyFactoryBean”. |