Spring LockRegistryLeaderInitiator получить роль лидера - PullRequest
0 голосов
/ 28 мая 2018

В настоящее время я работаю с реализацией, основанной на:

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

1 Ответ

0 голосов
/ 28 мая 2018

Похоже на разумный запрос;пожалуйста, откройте «Улучшение» JIRA Issue .

Возможно, немного некрасиво, но в качестве обходного пути вы можете разобрать его из context.toString() ...

@Override
public String toString() {
    return "LockContext{role=" + LockRegistryLeaderInitiator.this.candidate.getRole() +
            ", id=" + LockRegistryLeaderInitiator.this.candidate.getId() +
            ", isLeader=" + isLeader() + "}";
}

Вы должны будете защитить код парсера от возврата NULL_CONTEXT лямбды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...