|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
领导力事件处理
端点组可以根据领导权的授予或撤销分别开始或停止。 这在集群场景中非常有用,因为共享资源必须仅由单个实例消耗。 例如,一个轮询共享目录的文件入站通道适配器。 (参见阅读文件)
为了参与领导人选举并在当选领导人、领导被撤销或未能获得成为领导者的资源时收到通知,应用程序在应用上下文中创建一个称为“领导者发起者”的组件。
通常,领导者发起者是SmartLifecycle,所以它(可选地)在上下文开始时启动,然后在领导层更替时发布通知。
你也可以通过设置发布失败事件自true(从版本5.0开始),用于在发生故障时需要采取特定作的情况。
按照惯例,你应该提供候选人该系统接收回拨。
你也可以通过以下方式撤销领导权上下文由框架提供的对象。
你的代码也可以监听o.s.i.leader.event.摘要LeaderEvent实例(的超类OnGrantedEvent和OnRevokedEvent)并相应响应(例如,使用SmartLifecycleRoleController).
事件中包含对上下文对象。
以下列表展示了上下文接口:
public interface Context {
boolean isLeader();
void yield();
String getRole();
}
从版本5.0.6开始,上下文提供了候选人角色的引用。
Spring Integration 提供了一个基于锁注册抽象化。
要使用它,你需要创建一个 bean 实例,如下示例所示:
@Bean
public LockRegistryLeaderInitiator leaderInitiator(LockRegistry locks) {
return new LockRegistryLeaderInitiator(locks);
}
如果锁注册表实现正确,最多只有一个领导。
如果锁注册表也提供抛出异常的锁(理想情况下,中断异常当它们到期或被破坏时,无领导时间的持续时间可以缩短到锁实现固有延迟允许的最短时间。
默认情况下,忙着等米利斯属性会增加额外的延迟,以防止在(更常见的)锁不完美的情况下导致CPU耗尽,只有在重新尝试获得锁时才知道它们已过期。
有关领导选举及使用Zookeeper的活动的更多信息,请参见Zookeeper领导事件处理。 有关领导权选举及使用Hazelcast的活动的更多信息,请参见Hazelcast领导力活动处理。