領導事件處理

可以根據是否授予或撤銷領導權來啟動和停止一組端點。這在叢集場景中很有用,其中共享資源只能由單個例項使用。一個例子是輪詢共享目錄的檔案入站通道介面卡。(參見 讀取檔案)。

為了參與領導者選舉並在當選領導者時、撤銷領導權時或未能獲取資源成為領導者時收到通知,應用程式會在應用程式上下文中建立一個名為“領導者啟動器”的元件。通常,領導者啟動器是一個 SmartLifecycle,因此它在上下文啟動時啟動(可選),然後在領導權更改時釋出通知。您還可以透過將 publishFailedEvents 設定為 true(從版本 5.0 開始)來接收失敗通知,以便在發生故障時採取特定操作。按照約定,您應該提供一個接收回調的 Candidate。您還可以透過框架提供的 Context 物件撤銷領導權。您的程式碼還可以監聽 o.s.i.leader.event.AbstractLeaderEvent 例項(OnGrantedEventOnRevokedEvent 的超類),並做出相應的響應(例如,使用 SmartLifecycleRoleController)。這些事件包含對 Context 物件的引用。以下列表顯示了 Context 介面的定義。

public interface Context {

	boolean isLeader();

	void yield();

	String getRole();

}

從版本 5.0.6 開始,上下文提供了對候選者角色的引用。

Spring Integration 提供了一個基於 LockRegistry 抽象的領導者啟動器的基本實現。要使用它,您需要將其作為 bean 建立一個例項,如以下示例所示。

@Bean
public LockRegistryLeaderInitiator leaderInitiator(LockRegistry locks) {
    return new LockRegistryLeaderInitiator(locks);
}

如果鎖登錄檔正確實現,則最多隻有一個領導者。如果鎖登錄檔還提供了在鎖過期或被破壞時丟擲異常(理想情況下是 InterruptedException)的鎖,那麼無領導者期間的持續時間可以縮短到鎖實現固有的延遲所允許的範圍。預設情況下,busyWaitMillis 屬性會增加一些額外的延遲,以防止在鎖不完美(更常見)且只有在嘗試再次獲取鎖時才知道它們過期的情況下出現 CPU 飢餓。

有關使用 Zookeeper 進行領導者選舉和事件的更多資訊,請參見 Zookeeper 領導事件處理

© . This site is unofficial and not affiliated with VMware.