Я использую Spring Integration с очень простым c потоком: Шлюз -> Разветвитель -> Агрегатор -> Активатор службы. Мой активатор предполагает вернуться обратно к шлюзу, но это не так. Я получаю «заголовок output-channel или replyChannel недоступен». При подключении шлюза напрямую к активатору службы он работает нормально. Вот код вкратце:
@MessagingGateway(name = "gtw", defaultRequestChannel = "defChannel")
public interface IdemoGatewayInbound {
@Gateway(replyChannel = "backToGatewayChannel")
Message<String> processRequest(Message<List<BaseRequest>> message);
}
@MessageEndpoint
public class demoRequestSplitter {
@Splitter(inputChannel = "defChannel",
outputChannel = "requestSplitterOutputChannel")
public List<BaseRequest> splitRequestList(Message<List<BaseRequest>> message) {
return message.getPayload();
}
}
@MessageEndpoint
public class demoChannelAggregator {
@Aggregator(inputChannel = "requestSplitterOutputChannel", outputChannel = "requestAggregatorOutputChannel" )
public Message<List<BaseRequest>> aggregatingMethod(List<BaseRequest> items) {
Message<List<BaseRequest>> build = MessageBuilder.withPayload(items).setHeader(ChannelsConstants.DESTINATION_SYSTEM_CODE, "DEST1").build();
Map<String,String> headersToCopy = new HashMap<>();
headersToCopy.put(ChannelsConstants.DESTINATION_SYSTEM_CODE, "DEST1");
Message<List<BaseRequest>> msg1 = MessageBuilder.withPayload(items).copyHeaders(headersToCopy).build();
return msg1;
}
@MessageEndpoint
public class demoServiceActivator {
@ServiceActivator(inputChannel = "requestAggregatorOutputChannel" , outputChannel = "myReplyChannel")
public Message<String> outboundAdaptor(Message<List<BaseRequest>> destinationSysRequestList
) {
Message<String> build = MessageBuilder.withPayload("INNNN").setHeader("replyChannel", "backToGatewayChannel").build();
return msg1;
}