В настоящее время я работаю с реализацией, основанной на:
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