2016-11-17 7 views
1

Мы используем адаптер для входящего опроса весны, чтобы проверить файл и обработать его. Проблема заключается в том, что процесс запускает несколько узлов в режиме кластера. Наша тестовая среда использует балансировку нагрузки с двумя узлами, требование - начать этот процесс опроса на одном узле. Как мы можем достичь этого, не создавая двух военных файлов ...? Мы не должны использовать конфигурацию XML.Весенняя входная интеграция в режиме кластера

ответ

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} представляет предложение о назначении собственности.

Если вы не можете использовать некоторые общие сохраняемости ресурса для управления состоянием кластера, чем он не похож на кластер ...

+0

Спасибо за направление .. В настоящее время мы не используем какое-либо хранилище метаданных , Я буду исследовать в этом направлении. –

+0

Вы также можете использовать [Лидерские выборы] (http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#endpoint-roles) с zookeeper, так что работает только один экземпляр время. Вы также можете использовать системное свойство (для свойства autoStartup) и только запустить его; вы можете использовать какой-либо внешний монитор для остановки/запуска экземпляров по мере необходимости, возможно, используя JMX. –

+0

Я пробовал использовать свойства System, по какой-то причине он не работает должным образом. Создана интеграция переменных ENVAllowed = true и в приложении, использующая ее следующим образом: @InboundChannelAdapter (value = "fileInputChannel", autoStartup = "# {systemProperties ['integrationAllowed']}", poller = @Poller (fixedRate = "1000")) –