Я пытаюсь создать поток, который начинается с Http.inboundGateway -> выполняет несколько действий, таких как сохранение данных запроса в базе данных, обогащение заголовка, отправка в AMQP и возврат со статусом потока (успешно/сбой).
У меня есть несколько вещей, с которыми я борюсь и не могу понять.
1.) Регистрация запроса и ответа.
Мне удалось зарегистрировать запрос, полученный Http.inboundGateway (см. ниже. Не уверен, что это правильный способ сделать это, но он работает. Пожалуйста, предложите лучший способ сделать это). Тем не менее, я не могу получить ответное сообщение, которое отправляется клиенту, а также у меня нет идей о том, как рассчитать время транзакции потока и записать его в файл журнала. Было бы очень полезно, ЕСЛИ бы у меня был способ печатать статистику после каждой транзакции, например "Получено: 5, Успешно: 4, Неудачно: 1, Среднее время транзакции: 250 мс .. и т. д."
@Bean
public IntegrationFlow httpInboundGateway()
{
return IntegrationFlows.from(Http.inboundGateway("/httplistner")
.requestMapping(requestMapping -> requestMapping.methods(HttpMethod.POST))
.mappedRequestHeaders("*"))
.transform(new ObjectToStringTransformer())
.wireTap(flow -> flow.handle(message -> logger.info(">> Received Request from Caller.\nHeaders : "+message.getHeaders() + "\nPay Load : "+message.getPayload())))
.channel(httpRequestChannel())
.get();
}
2.) Как добавить операторы журнала в Spring DSL Flow?
Я хочу иметь возможность добавлять операторы журнала (для отладки) в свои определения DSL для интеграции, чтобы я мог просматривать файл журнала и понимать, что произошло и что пошло не так. На данный момент я НЕ смог найти способ сделать это, кроме добавления «.wireTap» в середине потока, как показано в определении выше. Пожалуйста, предложите, если есть лучший/правильный способ сделать это.
3.) Настройка ответа, отправляемого "Http.inboundGateway".
Я не мог понять, как настроить ответ HTTP, который Http.inboundGateway отправляет обратно клиентам после завершения потока. Как я могу это сделать, или вы можете указать мне документацию, где я могу прочитать и понять, как это сделать? Я хочу использовать Spring DSL.
То же самое относится и к ответам об ошибках. Как видите, я НЕ добавил канал ошибок в свой Http.inboundGateway. Таким образом, если ошибка происходит сейчас в его текущей конфигурации, клиент получает 500 и полную трассировку стека. Как получить сообщение об ошибке и создать собственный ответ на основе ошибки и отправить его клиенту. Пример: если они отправили мне полезную нагрузку XML, а XML искажен, я хочу иметь возможность отправить им HTTP 400 с некоторыми подробностями в ответе, указывающими, что их данные запроса неправильно сформированы.