I think the below covers what you want to do. In this case TestRouter always routes to channelOne as a simplification.
Code:
public class TestRouter {
@Router
public String routeMessage(Message<?> message){
return "channelOne";
}
}
Code:
<si:channel id="requests"/>
<si:channel id="channelOne">
<si:queue capacity="10"/>
</si:channel>
<si:channel id="replies">
<si:queue capacity="10"/>
</si:channel>
<si:router ref="router" input-channel="requests" />
<bean id="router" class="TestRouter"/>
<si:service-activator ref="consumerOne" input-channel="channelOne" />
<bean id="consumerOne" class="TestConsumer"/>
The message is routed to the TestConsumer which has no output-channel therefore the header that has been set is used to respond back to the replies channel.
Code:
MessageBuilder<String> requestBuilder = MessageBuilder.withPayload("test");
requestBuilder.setReplyChannelName("replies");
requestChannel.send(requestBuilder.build());
Message reply = replyChanmel.receive(5000);