此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

领导活动处理

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

为了参与领导者选举,并在当选为领导者、撤销领导层或未能获得成为领导者的资源时收到通知,应用程序会在应用程序上下文中创建一个称为“领导者发起方”的组件。 通常,领导者Starters是SmartLifecycle,因此它会在上下文启动时启动(可选),然后在领导层发生变化时发布通知。 您还可以通过设置publishFailedEventstrue(从 5.0 版开始),适用于您希望在发生故障时采取特定作的情况。 按照惯例,您应该提供一个Candidate接收回调。 您还可以通过Context框架提供的对象。 您的代码还可以监听o.s.i.leader.event.AbstractLeaderEvent实例(OnGrantedEventOnRevokedEvent)并做出相应的响应(例如,通过使用SmartLifecycleRoleController). 这些事件包含对Context对象。 以下列表显示了Context接口:spring-doc.cadn.net.cn

public interface Context {

	boolean isLeader();

	void yield();

	String getRole();

}

从版本 5.0.6 开始,上下文提供对候选人角色的引用。spring-doc.cadn.net.cn

Spring Integration 提供了基于LockRegistry抽象化。 要使用它,您需要创建一个实例作为 bean,如以下示例所示:spring-doc.cadn.net.cn

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

如果正确实现了锁注册表,则最多只有一个领导者。 如果锁注册表还提供抛出异常的锁(理想情况下,InterruptedException) 当它们过期或被破坏时,无领导周期的持续时间可以尽可能短,只要锁实现中的固有延迟允许。 默认情况下,busyWaitMillis属性会添加一些额外的延迟,以防止在(更常见的)情况下出现 CPU 匮乏,即锁不完美,并且只有在尝试再次获取锁时才知道它们已过期。spring-doc.cadn.net.cn

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