Спринт Интеграция DSL - Http Входящий адаптер и Poller
Я довольно новичок в Spring Integration и пытаюсь настроить простой вариант использования:
опросить удаленную конечную точку REST, разбить возвращенную полезную нагрузку на несколько строк и отправить ее на исходящий адаптер Kafka. Я успешно сделал что-то аналогичное, которое использует файловый адаптер, но я застрял с HTTP-адаптером. Я не понимаю, как связать поллер с входящим адаптером HTTP.
До сих пор мой подход заключался в создании простого потока:
return IntegrationFlows
.from
(
Http.inboundChannelAdapter("http://localhost:8080/data")
.requestMapping(m -> m.methods(HttpMethod.GET))
.replyTimeout(20)
)
.channel(INBOUND_DEMO_CHANNEL)
.get();
inboundChannelAdapter
кажется, не принимает Poller
, В моей предыдущей попытке с помощью файла я создал FileReadingMessageSource
так что мой поток выглядел так:
return IntegrationFlows.from(fileReadingMessageSource,
// POLLER CONFIGURATION
.poller(Pollers.fixedDelay(period)
...
.get();
но я не могу найти эквивалент источника сообщения HTTP.
1 ответ
Ну, вы упускаете тот факт, что HTTP является управляемым событиями по своей природе, и это сервер здесь. Вы используете его с точки зрения конечного пользователя, как вызов URL из браузера, какого-либо инструмента командной строки или любого другого HTTP-клиента.
Не уверен, что заставило вас думать, что HTTP-сервер опрашивает. И не уверен, что это должен опрос, хотя...
Может быть, то, что вам нужно, с точностью до наоборот - Http.outboundGateway()
, где вы вызываете какую-то удаленную службу REST и ждете ответа. Но это уже не источник, это процессор.
Если вам действительно нужно периодически вызывать такую услугу, вы можете использовать простой опрос MessageSource
:
IntegrationFlows.from(() -> new GenericMessage<>(""),
.poller(Pollers.fixedDelay(period))
.handle(Http.outboundGateway("http://localhost:8080/data"))