我目前正在使用基于以下内容的实现:
org.springframework.integration.support.leader.LockRegistryLeaderInitiator
支持不同的领导者候选角色,以便只允许每个角色的领导者节点执行调度程序。总的来说,集群将有两个领导节点:一个用于调度1,一个用于调度2角色。将分配每个角色以执行不同的调度程序。您可以在下面找到xml配置:
<bean id="scheduling1LeaderInitiator" class="org.springframework.integration.support.leader.LockRegistryLeaderInitiator">
<constructor-arg name="locks" ref="jdbcLockRegistry"/>
<constructor-arg name="candidate" ref="scheduling1LeaderCandidate"/>
</bean>
<bean id="scheduling1LeaderCandidate" class="org.springframework.integration.leader.DefaultCandidate">
<constructor-arg name="id" value="#{T(java.util.UUID).randomUUID().toString()}"/>
<constructor-arg name="role" value="scheduling1"/>
</bean>
<bean id="scheduling2LeaderInitiator" class="org.springframework.integration.support.leader.LockRegistryLeaderInitiator">
<constructor-arg name="locks" ref="jdbcLockRegistry"/>
<constructor-arg name="candidate" ref="scheduling2LeaderCandidate"/>
</bean>
<bean id="scheduling2LeaderCandidate" class="org.springframework.integration.leader.DefaultCandidate">
<constructor-arg name="id" value="#{T(java.util.UUID).randomUUID().toString()}"/>
<constructor-arg name="role" value="scheduling2"/>
</bean>
虽然我可以在LockRegistryLeaderInitiator构造函数中设置候选者,但是没有办法取回候选人的角色,或者只是我遗漏了一些东西。我希望Context能够提供对这些信息的访问,因为每个角色分配了几个领导者实例。例如:
if (leaderInitiator.getContext().isLeader()) {
String role = leaderInitiator.getContext().getRole();
}
目前在Spring实现中缺失。
Spring集成版:5.0.5.RELEASE
答案 0 :(得分:2)
似乎是一个合理的要求;请打开“改进”JIRA Issue。
或许有点难看,但作为一种解决方法,你可以解析它context.toString()
...
@Override
public String toString() {
return "LockContext{role=" + LockRegistryLeaderInitiator.this.candidate.getRole() +
", id=" + LockRegistryLeaderInitiator.this.candidate.getId() +
", isLeader=" + isLeader() + "}";
}
您必须保护解析器代码不要取回NULL_CONTEXT
lambda。