对于最新稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

领导力事件处理

端点组可以根据领导权的授予或撤销分别开始或停止。 这在集群场景中非常有用,因为共享资源必须仅由单个实例消耗。 例如,一个轮询共享目录的文件入站通道适配器。 (参见阅读文件spring-doc.cadn.net.cn

为了参与领导人选举并在当选领导人、领导被撤销或未能获得成为领导者的资源时收到通知,应用程序在应用上下文中创建一个称为“领导者发起者”的组件。 通常,领导者发起者是SmartLifecycle,所以它(可选地)在上下文开始时启动,然后在领导层更替时发布通知。 你也可以通过设置发布失败事件true(从版本5.0开始),用于在发生故障时需要采取特定作的情况。 按照惯例,你应该提供候选人该系统接收回拨。 你也可以通过以下方式撤销领导权上下文由框架提供的对象。 你的代码也可以监听o.s.i.leader.event.摘要LeaderEvent实例(的超类OnGrantedEventOnRevokedEvent)并相应响应(例如,使用SmartLifecycleRoleController). 事件中包含对上下文对象。 以下列表展示了上下文接口:spring-doc.cadn.net.cn

public interface Context {

	boolean isLeader();

	void yield();

	String getRole();

}

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

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

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

如果锁注册表实现正确,最多只有一个领导。 如果锁注册表也提供抛出异常的锁(理想情况下,中断异常当它们到期或被破坏时,无领导时间的持续时间可以缩短到锁实现固有延迟允许的最短时间。 默认情况下,忙着等米利斯属性会增加额外的延迟,以防止在(更常见的)锁不完美的情况下导致CPU耗尽,只有在重新尝试获得锁时才知道它们已过期。spring-doc.cadn.net.cn

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