对于最新的稳定版本,请使用 Spring Integration 6.4.0spring-doc.cn

领导层活动处理

终端节点组可以根据授予或撤销的领导权分别启动和停止。 这在共享资源必须仅由单个实例使用的集群场景中非常有用。 这方面的一个例子是轮询共享目录的文件入站通道适配器。 (请参阅读取文件)。spring-doc.cn

为了参与领导者选举并在当选领导者、撤销领导者或未能获得成为领导者的资源时收到通知,应用程序会在应用程序上下文中创建一个称为“领导者发起方”的组件。 通常,领导发起方是 ,因此它在上下文启动时启动(可选),然后在领导层发生变化时发布通知。 您还可以通过将 设置为 (从版本 5.0 开始) 来接收失败通知,以便在发生故障时希望采取特定操作。 按照惯例,您应该提供接收回调的 a。 您还可以通过框架提供的对象撤销领导权。 您的代码还可以侦听实例(和 的超类)并相应地响应(例如,通过使用 a )。 事件包含对对象的引用。 下面的清单显示了接口的定义:SmartLifecyclepublishFailedEventstrueCandidateContexto.s.i.leader.event.AbstractLeaderEventOnGrantedEventOnRevokedEventSmartLifecycleRoleControllerContextContextspring-doc.cn

public interface Context {

	boolean isLeader();

	void yield();

	String getRole();

}

从版本 5.0.6 开始,上下文提供对应聘者角色的引用。spring-doc.cn

Spring 集成提供了基于抽象的 leader initiator 的基本实现。 要使用它,你需要创建一个实例作为 Bean,如下例所示:LockRegistryspring-doc.cn

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

如果 lock registry 正确实现,则最多只有一个 leader。 如果 lock registry 还提供在过期或损坏时引发异常(理想情况下)的锁,则无领导期的持续时间可以尽可能短,以锁定实现中的固有延迟所允许的最短。 默认情况下,该属性会添加一些额外的延迟,以防止在锁不完美(更常见)的情况下出现 CPU 匮乏,并且只有在尝试再次获取锁时才知道它们已过期。InterruptedExceptionbusyWaitMillisspring-doc.cn

有关领导层选举和使用 Zookeeper 的事件的更多信息,请参阅 Zookeeper 领导层事件处理。 有关领导层选举和使用 Hazelcast 的事件的更多信息,请参阅 Hazelcast 领导层事件处理spring-doc.cn