1
我們使用彈簧入站輪詢適配器來檢查文件並對其進行處理。問題是進程在集羣模式下運行多個節點。我們的測試環境對兩個節點使用負載均衡,要求在一個節點上啓動此輪詢過程。我們如何在不創建兩個戰爭文件的情況下實現這一點?我們不應該使用XML配置。集羣模式下的彈性入站集成
我們使用彈簧入站輪詢適配器來檢查文件並對其進行處理。問題是進程在集羣模式下運行多個節點。我們的測試環境對兩個節點使用負載均衡,要求在一個節點上啓動此輪詢過程。我們如何在不創建兩個戰爭文件的情況下實現這一點?我們不應該使用XML配置。集羣模式下的彈性入站集成
爲此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}
表示屬性佔位符句子。
如果你不能使用一些共享資源的持久性來控制羣集狀態,比它看起來並不像一個集羣...
謝謝你的方向。目前,我們沒有使用任何元數據存儲,我會在這個方向探索。 –
你也可以使用zookeeper的[Leadership Election](http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#endpoint-roles),這樣只有一個實例在一次。您也可以使用系統屬性(用於autoStartup屬性)並僅啓動一個系統屬性;您可以使用某個外部監視器來根據需要停止/啓動實例,也許使用JMX。 –
我嘗試使用系統屬性,出於某種原因它沒有按預期工作。創建一個ENV變量integrationAllowed = true並在應用程序中使用它像這樣@InboundChannelAdapter(value =「fileInputChannel」,autoStartup =「#{systemProperties ['integrationAllowed']}」,poller = @Poller(fixedRate =「1000」)) –