Мы используем адаптер для входящего опроса весны, чтобы проверить файл и обработать его. Проблема заключается в том, что процесс запускает несколько узлов в режиме кластера. Наша тестовая среда использует балансировку нагрузки с двумя узлами, требование - начать этот процесс опроса на одном узле. Как мы можем достичь этого, не создавая двух военных файлов ...? Мы не должны использовать конфигурацию XML.Весенняя входная интеграция в режиме кластера
1
A
ответ
0
Для этой цели Spring Integration обеспечивает FileSystemPersistentAcceptOnceFileListFilter
, которые вы должны настроить с таким же раздельным внешним MetadataStore
: http://docs.spring.io/spring-integration/reference/html/system-management-chapter.html#metadata-store
EDIT
Как предложил Гэри, вы можете контролировать autoStartup
для адаптера входящего канала.
Я проверил это нравится:
@BeforeClass
public static void setup() {
System.setProperty("integrationAllowed", "false");
}
...
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
@InboundChannelAdapter(value = "flow1.input", autoStartup = "${integrationAllowed}", poller = @Poller(fixedRate = "100"))
public MessageSource<?> integerMessageSource() {
работает хорошо.
Выражение ${integrationAllowed}
представляет предложение о назначении собственности.
Если вы не можете использовать некоторые общие сохраняемости ресурса для управления состоянием кластера, чем он не похож на кластер ...
Спасибо за направление .. В настоящее время мы не используем какое-либо хранилище метаданных , Я буду исследовать в этом направлении. –
Вы также можете использовать [Лидерские выборы] (http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#endpoint-roles) с zookeeper, так что работает только один экземпляр время. Вы также можете использовать системное свойство (для свойства autoStartup) и только запустить его; вы можете использовать какой-либо внешний монитор для остановки/запуска экземпляров по мере необходимости, возможно, используя JMX. –
Я пробовал использовать свойства System, по какой-то причине он не работает должным образом. Создана интеграция переменных ENVAllowed = true и в приложении, использующая ее следующим образом: @InboundChannelAdapter (value = "fileInputChannel", autoStartup = "# {systemProperties ['integrationAllowed']}", poller = @Poller (fixedRate = "1000")) –