定時任務的執行在分佈式系統中很常見的一個問題,若是多臺機器同時執行相同的定時任務,業務複雜則可能出現災難性的後果。
Zookeeper開源客戶端Curator,使用Curator的leader選舉功能能夠實現
Curator提供了兩種選舉方案:Leader Latch和Leader Election。
(1)Leader Latch:隨機從候選着中選出一臺做爲leader,選中以後除非調用close()釋放leadship,不然其餘的後選擇沒法成爲leader。
(2)Leader Election:經過LeaderSelectorListener能夠對領導權進行控制,在適當的時候釋放領導權,這樣每一個節點都有可能得到領導權。而LeaderLatch則一直持有leadership,除非調用close方法,不然它不會釋放領導權。
咱們這裏用的是Leader Election。
1.Maven依賴apache
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.10.0</version> </dependency>
2.代碼
測試執行方法
分佈式
Curator提供了兩種方法來實現Leader選舉,不單單用在定時任務上,其餘場景也能夠使用。測試