выборы лидера весенней интеграции отменяют лидерство с реестром блокировки jdbc при отправке сообщения на шину управления - PullRequest
0 голосов
/ 03 марта 2019

Я построил этот пример POC, где я хотел бы запустить адаптер для входящего канала Spring JDBC при выборе лидера.Я вижу, что когда я добавляю код, который отправляет сообщение шины управления для запуска адаптера входящего канала jdbc, он немедленно отменяет лидерство, поэтому работает в состоянии, когда у меня нет активного лидера.Если я закомментирую код, отправляющий сообщение на управляющую шину, у меня всегда будет один лидер, работающий в кластере.

Вот полный код POC

Poc выбора лидера

Это то, что я делаю в своем пользовательском объекте-кандидате

@Override
public void onGranted(Context context) {
    super.onGranted(context);
    System.out.println("*** Leadership granted ***");
    System.out.println("STARTING JDBC POLLER");
    Message<String> startMsg = MessageBuilder.withPayload("@jdbcPoller.start()").build();
    systemMessageChannel.send(startMsg);
    System.out.println("STARTUP MESSAGE SENT");

}

 @Override
public void onRevoked(Context context) {

    System.out.println("*** Leadership revoked ***");
    System.out.println("STOPPING JDBC POLLER");
    Message<String> stringMessage = MessageBuilder.withPayload("@jdbcPoller.stop()").build();
    systemMessageChannel.send(stringMessage);
    System.out.println("SHUTDOWN MESSAGE SENT");
    super.onRevoked(context);
}

Может кто-нибудь сказать мне, что не так с этим кодом?

1 Ответ

0 голосов
/ 04 марта 2019

Похоже, ваша проблема здесь:

@Bean
public LockRegistryLeaderInitiator leaderInitiator(LockRegistry lockRegistry) {
    return new LockRegistryLeaderInitiator(lockRegistry, new LeaderCandidate());
}

Вы видите, как вы создаете LeaderCandidate как встроенный объект.Поскольку предполагается, что это связано с внедрением зависимостей, вы должны объявить его как bean-компонент:

@Bean
public LockRegistryLeaderInitiator leaderInitiator(LockRegistry lockRegistry) {
    return new LockRegistryLeaderInitiator(lockRegistry, leaderCandidate());
}

@Bean
public Candidate leaderCandidate() {
    return new LeaderCandidate();
}

Также учтите, что не удаляйте таблицы при запуске нового экземпляра вашего приложения.

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