Параметры внешнего запуска / Kubernetes для запуска / остановки опроса spring integration

#spring-integration

#spring-интеграция

Вопрос:

У меня есть poller , который запускается каждые x секунд. Я хотел бы контролировать start/stop poller , а также иметь возможность запускать его только один раз. Внешний вызов должен иметь возможность управлять этим.

  1. Запустите опрос и продолжайте опрос каждые x интервалов
  2. Остановите опрос
  3. Опрос только один раз и остановка -> Как это сделать?

Опрос выполняется с помощью a inbound-channel-adapter с a poller . Я опрашиваю данные конфигурации внешних систем, к которым подключаются нисходящие потоки, чтобы получать данные и направлять их в другие системы

Я могу либо использовать методы жизненного цикла опросника, либо шину управления в том же контексте для настройки вышеуказанных вызовов.

Как я могу запустить эту логику? Опросник будет выполняться в kubernetes. Некоторые параметры:

  1. HTTP
  2. Привод
  3. ?

Ответ №1:

Насколько я знаю, привод загрузки Spring в любом случае основан на конечных точках HTTP. итак, технически никакой разницы с точки зрения конечного пользователя.

Если вы действительно можете написать какую-либо службу REST с помощью команд, подобных описанию, тогда вы действительно можете внедрить a SourcePollingChannelAdapter в эту службу и делегировать ее start() and stop() .

Я думаю, что «опрос только один раз» вы можете выполнить с помощью логической переменной состояния, с которой вы можете проконсультироваться из MessageSourceMutator.beforeReceive() рекомендаций, введенных в этот опрос. Таким образом, вы оставите обычный триггер опроса нетронутым.

См. Также Поддержку JMS (если она доступна в Kubernetes): https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/system-management.html#jmx-mbean-exporter

Комментарии:

1. Спасибо за решения. Я попробую подходы и опубликую свою реализацию здесь. Для poll only once , у меня уже есть ReceiveMessageAdvice , чтобы избежать дублирования сеансов опроса. Любые другие варианты в рамках, какие-либо предложения?

2. Вы также можете взглянуть на CompoundTrigger so, всякий раз, когда вам нужно «только один раз», вы вызываете его setOverride() для некоторой OnlyOnceTrigger реализации (вы можете найти некоторые в рамках). В противном случае вы сбрасываете его, null чтобы позволить обычному триггеру выполнить задание.

3. OnlyOnceTrigger находится в тестовом пакете org.springframework.integration.test.util . Кажется немного странным включать класс тестового пакета в основную логику. Может быть, в будущем его можно перенести в основные пакеты?

4. Ну, это действительно для целей тестирования. Я показал вам это как место для заимствования идей