Я новичок в Spring Integration и пытаюсь использовать HttpRequestExecutingMessageHandler и HttpRequestHandlingMessagingGateway.Обработчик отправляет запрос POST и ожидает ответа.Шлюз потребляет запрос.Он работает нормально, НО обработчик не получает ответ.Я не знаю, как настроить мой поток, чтобы я мог напрямую отправить ответ и продолжить мой поток.
@Bean
public HttpRequestExecutingMessageHandler httpOutbound() {
HttpRequestExecutingMessageHandler handler = Http.outboundGateway(restUrl)
.httpMethod(HttpMethod.POST)
.messageConverters(new MappingJackson2HttpMessageConverter())
.mappedRequestHeaders("Content-Type")
.get();
handler.setExpectReply(true);
handler.setOutputChannel(httpResponseChannel());
return handler;
}
@Bean
public HttpRequestHandlingMessagingGateway httpRequestGateway() {
HttpRequestHandlingMessagingGateway gateway = new HttpRequestHandlingMessagingGateway(true);
RequestMapping mapping = new RequestMapping();
mapping.setMethods(HttpMethod.POST);
mapping.setPathPatterns(httpRequestHandlingPathPattern);
gateway.setRequestMapping(mapping);
gateway.setErrorChannel(errorChannel());
gateway.setReplyChannel(replyChannel());
gateway.setRequestChannel(requestChannel());
gateway.setRequestPayloadTypeClass(DocumentConverterInput.class);
return gateway;
}
@Bean
public IntegrationFlow documentConverterFlow() {
return IntegrationFlows
.from(requestChannel())
.publishSubscribeChannel(publishSubscribeSpec ->
publishSubscribeSpec.subscribe(flow -> flow
.enrichHeaders(headerEnricherSpec -> headerEnricherSpec.header("http_statusCode", HttpStatus.OK))
.channel(replyChannel())))
.enrichHeaders(headerEnricherSpec ->
headerEnricherSpec.headerExpression(Constants.DOCUMENT_CONVERTER_INPUT, "payload"))
.handle(Jms.outboundAdapter(jmsTemplate(connectionFactory)))
.get();
}
Мой HttpRequestExecutingMessageHandler успешно публикует запрос.HttpRequestHandlingMessagingGateway успешно использует его.Сначала у меня была ошибка «Нет ответа в течение тайм-аута», поэтому я добавил publishSubscriberChannel.Я не знаю, если это правильный путь, но я не могу найти рабочие примеры, которые показывают, как правильно ответить.
Мой код выше работает, НО не отправляет ответ обратно HttpRequestExecutingMessageHandler!
Моя цель - получить сообщение с запросом и отправить обратно 200 OK.После этого я хочу продолжить процесс интеграции, сделать что-нибудь и отправить результат в очередь.
Есть предложения?