Подсистема CP не включена - PullRequest
2 голосов
/ 09 марта 2020

Я использую Hazelcast с:

  • spring-integration-hazelcast:1.0.0.RELEASE
  • hazelcast-all:3.12.4
  • см. [1] для подробной информации о gradle

И все работает отлично:)

Поскольку я столкнулся с некоторыми проблемами, я попытался обновить его до последних версий, поэтому:

  • hazelcast 3.12.6
  • и spring-integration-hazelcast 2.0.0.RELEASE

Но мое приложение даже не запускается, я получаю:

cluster-manager_1  | com.hazelcast.core.HazelcastException: CP Subsystem is not enabled!
cluster-manager_1  |    at com.hazelcast.cp.internal.RaftInvocationManager.completeExceptionallyIfCPSubsystemNotAvailable(RaftInvocationManager.java:113)
cluster-manager_1  |    at com.hazelcast.cp.internal.RaftInvocationManager.invoke(RaftInvocationManager.java:186)
cluster-manager_1  |    at com.hazelcast.cp.internal.RaftService.getGroupInfoForProxy(RaftService.java:752)
cluster-manager_1  |    at com.hazelcast.cp.internal.RaftService.createRaftGroupForProxy(RaftService.java:704)
cluster-manager_1  |    at com.hazelcast.cp.internal.datastructures.lock.RaftLockService.doCreateProxy(RaftLockService.java:193)
cluster-manager_1  |    at com.hazelcast.cp.internal.datastructures.lock.RaftLockService.createProxy(RaftLockService.java:177)
cluster-manager_1  |    at com.hazelcast.cp.internal.datastructures.lock.RaftLockService.createProxy(RaftLockService.java:43)
cluster-manager_1  |    at com.hazelcast.cp.internal.CPSubsystemImpl.getLock(CPSubsystemImpl.java:76)
cluster-manager_1  |    at org.springframework.integration.hazelcast.HazelcastLocalInstanceRegistrar.syncConfigurationMultiMap(HazelcastLocalInstanceRegistrar.java:99)
cluster-manager_1  |    at org.springframework.integration.hazelcast.HazelcastLocalInstanceRegistrar.afterSingletonsInstantiated(HazelcastLocalInstanceRegistrar.java:86)
cluster-manager_1  |    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:896)
cluster-manager_1  |    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
cluster-manager_1  |    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
cluster-manager_1  |    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
cluster-manager_1  |    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
cluster-manager_1  |    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
cluster-manager_1  |    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
cluster-manager_1  |    at com.btnty.citm.clustermanager.springboot.ClusterManagerApplication.main(ClusterManagerApplication.java:49)
cluster-manager_1  |    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
cluster-manager_1  |    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
cluster-manager_1  |    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
cluster-manager_1  |    at java.lang.reflect.Method.invoke(Method.java:498)
cluster-manager_1  |    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
cluster-manager_1  |    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
cluster-manager_1  |    at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
cluster-manager_1  |    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)

Но почему? :-( «Проблема» не hazelcast 3.12.6, потому что она отлично работает spring-integration-hazelcast 1.0.0.RELEASE. Но изменение с spring-integration-hazelcast 1.0.0.RELEASE на 2.0.0.RELEASE вызывает эту ошибку.

[1]

  implementation ("org.springframework.boot:spring-boot-starter-web:2.2.5.RELEASE") 
  implementation ("org.springframework.integration:spring-integration-hazelcast:1.0.0.RELEASE")
  implementation "com.hazelcast:hazelcast-all:3.12.4"
  compile group: 'org.springframework.integration', name: 'spring-integration-core', version: '5.2.1.RELEASE'

1 Ответ

1 голос
/ 13 марта 2020

Проблема в том, что модуль spring-integration использует подсистему Hazelcast CP CPSubsystemImpl.getLock()), которая по умолчанию отключена в Hazelcast.

Вы можете включить его с помощью следующих Конфигурация Hazelcast:

@Bean
HazelcastInstance hazelcastInstance() {
    Config config = new Config();
    config.getCPSubsystemConfig().setCPMemberCount(3);
    return Hazelcast.newHazelcastInstance(config);
}

Обратите внимание, что тогда в вашем кластере должно быть (как минимум) 3 члена Hazelcast.

...