此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
领导活动处理
可以分别根据授予或撤销的领导权启动和停止终结点组。 这在集群方案中非常有用,其中共享资源必须仅由单个实例使用。 这方面的一个示例是轮询共享目录的文件入站通道适配器。 (请参阅读取文件)。
为了参与领导者选举,并在当选为领导者、撤销领导层或未能获得成为领导者的资源时收到通知,应用程序会在应用程序上下文中创建一个称为“领导者发起方”的组件。
通常,领导者Starters是SmartLifecycle
,因此它会在上下文启动时启动(可选),然后在领导层发生变化时发布通知。
您还可以通过设置publishFailedEvents
自true
(从 5.0 版开始),适用于您希望在发生故障时采取特定作的情况。
按照惯例,您应该提供一个Candidate
接收回调。
您还可以通过Context
框架提供的对象。
您的代码还可以监听o.s.i.leader.event.AbstractLeaderEvent
实例(OnGrantedEvent
和OnRevokedEvent
)并做出相应的响应(例如,通过使用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 领导事件处理。 有关领导选举和使用 Hazelcast 的事件的更多信息,请参阅 Hazelcast 领导活动处理。