Спринт Интеграция 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"))
Другие вопросы по тегам