【问题标题】:Hazelcast need to be connected as client in the existing cluster instead of memberHazelcast 需要作为现有集群中的客户端而不是成员连接
【发布时间】:2018-05-30 10:40:50
【问题描述】:

我在服务器端所做的更改:

@Bean(name = {"hazelcast"})
public HazelcastInstance hazelcastInstance() {
    ClientConfig clientConfig = new ClientConfig();
    clientConfig.getGroupConfig().setName(integrationSettings.getHazelcastClusterGroupName())
        .setPassword(integrationSettings.getHazelcastClusterGroupPass());

    final ClientNetworkConfig clientNetworkConfig = new ClientNetworkConfig();
    clientNetworkConfig.addAddress("127.0.0.1:6701");
    clientConfig.setNetworkConfig(clientNetworkConfig);
    clientConfig.setInstanceName("INTEGRATION_INSTANCE");
    final String hazelcastEnterpriseLicenseKey = null;
    if (hazelcastEnterpriseLicenseKey != null) {
        clientConfig.setLicenseKey(hazelcastEnterpriseLicenseKey);
    }

    return HazelcastClient.newHazelcastClient(clientConfig);
}

我将从我的属性文件中获取我的组名和密码。

我的客户端代码:

    ClientConfig clientConfig = new ClientConfig();            

 clientConfig.getGroupConfig().setName(hazelcastGroupName).setPassword(hazelcastGroupPwd);
    clientConfig.getNetworkConfig().addAddress(serverAddress);
    hazelcastInstance = HazelcastClient.newHazelcastClient(clientConfig);

我的错误日志:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.hazelcast.core.HazelcastInstance]: Factory method 'hazelcastInstance' threw exception; nested exception is java.lang.IllegalStateException: Unable to connect to any address in the config! The following addresses were tried: [[127.0.0.1]:6701]
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
            at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
            ... 37 more
        Caused by: java.lang.IllegalStateException: Unable to connect to any address in the config! The following addresses were tried: [[127.0.0.1]:6701]
            at com.hazelcast.client.spi.impl.ClusterListenerSupport.connectToCluster(ClusterListenerSupport.java:178)
            at com.hazelcast.client.spi.impl.ClientClusterServiceImpl.start(ClientClusterServiceImpl.java:189)
            at com.hazelcast.client.impl.HazelcastClientInstanceImpl.start(HazelcastClientInstanceImpl.java:404)
            at com.hazelcast.client.HazelcastClientManager.newHazelcastClient(HazelcastClientManager.java:78)
            at com.hazelcast.client.HazelcastClient.newHazelcastClient(HazelcastClient.java:72)
            at com.zafin.zrpe.integration.config.ZrpeIntegrationConfiguration.hazelcastInstance(ZrpeIntegrationConfiguration.java:85)
            at com.zafin.zrpe.integration.config.ZrpeIntegrationConfiguration$$EnhancerBySpringCGLIB$$7af6798e.CGLIB$hazelcastInstance$6(<generated>)
            at com.zafin.zrpe.integration.config.ZrpeIntegrationConfiguration$$EnhancerBySpringCGLIB$$7af6798e$$FastClassBySpringCGLIB$$25f010cb.invoke(<generated>)
            at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
            at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
            at com.zafin.zrpe.integration.config.ZrpeIntegrationConfiguration$$EnhancerBySpringCGLIB$$7af6798e.hazelcastInstance(<generated>)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
            ... 38 more

我需要连接我的 hazelcast 作为客户端,但是这个 bean 异常导致部署失败。还有其他方法吗?

【问题讨论】:

  • 给定的错误表明 Hazelcast 客户端无法连接到指定的地址 - 127.0.0.1:6701。你想连接到单独运行的 Hazelcast 成员吗?还是嵌入式的?
  • 你有一个在127.0.0.1:6701上运行的成员(服务器)吗?默认情况下,hazelcast 在端口 5701 上运行,所以也许你在那里打错了?
  • @Nazar 我已经在集群中运行了一个 hazelcast 客户端。我想在该集群中添加另一个 hazelcast 作为客户端而不是成员
  • @sertug 是的,我的 hazelcast 客户端已经在此端口中运行。它也将接受此端口。我猜端口不是问题,因为我什至没有指定任何将采用默认端口的端口。
  • 只是为了消除混淆:addAddress() 方法是为客户提供 hazelcast 成员的地址。该地址列表是客户端将连接到的集群地址的初始列表。它不是客户端将自己使用的地址。所以你需要在这个方法中给集群中的一个成员地址。

标签: wildfly daemon hazelcast multicast tcp-ip


【解决方案1】:

查看您的代码,您正在服务器端和客户端创建“Hazelcast-Client”。在服务器端代码中,请通过传递“Config”对象而不是“ClientConfig”来创建一个 hazelcast ServerMember 实例,更像

@Bean
public HazelcastInstance hazelcastInstance() throws Exception {

    Config cfg = new Config();
    ...
    ...
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
    return instance;
}

Hazelcast-client 可以连接到 Hazelcast ServerMember。您还需要确保在客户端可以连接之前启动 ServerMember。

【讨论】:

  • 我需要在服务器端代码中连接“hazelcast”作为客户端。所以我正在使用 ClientConfig 的东西。如果我使用 Config,它将作为成员连接。
  • 您可以使用 hazelcast 客户端从服务器端代码连接到 Hazelcast 服务器,但是随后应该运行 hazelcast 服务器 .. 在您的情况下不会发生这种情况。请参考参考手册中的 Hazelcast 拓扑部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多