2016-11-17 28 views
1

我們使用彈簧入站輪詢適配器來檢查文件並對其進行處理。問題是進程在集羣模式下運行多個節點。我們的測試環境對兩個節點使用負載均衡,要求在一個節點上啓動此輪詢過程。我們如何在不創建兩個戰爭文件的情況下實現這一點?我們不應該使用XML配置。集羣模式下的彈性入站集成

回答

0

爲此Spring集成提供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

你也可以使用zookeeper的[Leadership Election](http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#endpoint-roles),這樣只有一個實例在一次。您也可以使用系統屬性(用於autoStartup屬性)並僅啓動一個系統屬性;您可以使用某個外部監視器來根據需要停止/啓動實例,也許使用JMX。 –

+0

我嘗試使用系統屬性,出於某種原因它沒有按預期工作。創建一個ENV變量integrationAllowed = true並在應用程序中使用它像這樣@InboundChannelAdapter(value =「fileInputChannel」,autoStartup =「#{systemProperties ['integrationAllowed']}」,poller = @Poller(fixedRate =「1000」)) –