0
我有一个简单的用例,其中一个节点应该能够使用主题将消息发布到另一个节点。我能够在Hazelcast中通过简单的客户端 - 服务器通信模式来实现这一点。然而,当我能够在客户端和服务器SSL我得到的客户端此异常Hazelcast [3.2.6]启用SSL时客户端无法连接
java.lang.IllegalStateException: Cannot get initial partitions!
at com.hazelcast.client.spi.impl.ClientPartitionServiceImpl.getInitialPartitions(ClientPartitionServiceImpl.java:100) ~[hazelcast-client-3.2.6.jar:3.2.6]
at com.hazelcast.client.spi.impl.ClientPartitionServiceImpl.start(ClientPartitionServiceImpl.java:60) ~[hazelcast-client-3.2.6.jar:3.2.6]
at com.hazelcast.client.HazelcastClient.start(HazelcastClient.java:223) ~[hazelcast-client-3.2.6.jar:3.2.6]
at com.hazelcast.client.HazelcastClient.newHazelcastClient(HazelcastClient.java:186) ~[hazelcast-client-3.2.6.jar:3.2.6]
和服务器输出的日志中
09/29/2014 14:40:06.806 [hz.defaulttenant-defaultorg0.IO.thread-Acceptor - platform] INFO c.h.nio.TcpIpConnectionManager - [x.x.x.x]:5702 [defaulttenant-defaultorg0] [3.2.6] Established socket connection between /x.x.x.x:5702 and /x.x.x.x:55831
09/29/2014 14:40:16.844 [hz.defaulttenant-defaultorg0.IO.thread-Acceptor - platform] INFO com.hazelcast.nio.SocketAcceptor - [x.x.x.x]:5702 [defaulttenant-defaultorg0] [3.2.6] Accepting socket connection from /x.x.x.x:55832
09/29/2014 14:40:16.845 [hz.defaulttenant-defaultorg0.IO.thread-Acceptor - platform] INFO c.h.nio.TcpIpConnectionManager - [x.x.x.x]:5702 [defaulttenant-defaultorg0] [3.2.6] Established socket connection between /x.x.x.x:5702 and /x.x.x.x:55832
09/29/2014 14:40:21.847 [hz.defaulttenant-defaultorg0.IO.thread-Acceptor - platform] INFO com.hazelcast.nio.SocketAcceptor - [x.x.x.x]:5702 [defaulttenant-defaultorg0] [3.2.6] Accepting socket connection from /x.x.x.x:55833
09/29/2014 14:40:21.847 [hz.defaulttenant-defaultorg0.IO.thread-Acceptor - platform] INFO c.h.nio.TcpIpConnectionManager - [x.x.x.x]:5702 [defaulttenant-defaultorg0] [3.2.6] Established socket connection between /x.x.x.x:5702 and /x.x.x.x:55833
我已经通过配置XML启用SSL服务器端以下
<ssl enabled="true">
<factory-class-name>com.hazelcast.nio.ssl.BasicSSLContextFactory</factory-class-name>
<properties>
<property name="keyStore">cert.jks</property>
<property name="keyStorePassword">password</property>
<property name="keyManagerAlgorithm">SunX509</property>
<property name="trustManagerAlgorithm">SunX509</property>
<property name="protocol">TLS</property>
</properties>
</ssl>
和客户端使用下面的代码来访问服务器
ClientConfig clf = new ClientConfig();
clf.getNetworkConfig().addAddress("x.x.x.x:5702");
clf.getGroupConfig().setName("grp-name");
clf.getGroupConfig().setPassword("password");
clf.getNetworkConfig().setSSLConfig(NodeCommUtil.getSSLConfig());
clf.getNetworkConfig().setSocketOptions(socketOptions);
HazelcastInstance client = HazelcastClient.newHazelcastClient(clf);
public static SSLConfig getSSLConfig() throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException,
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
SSLConfig sslConfig = new SSLConfig();
sslConfig.setEnabled(true);
sslConfig.setFactoryClassName("com.hazelcast.nio.ssl.BasicSSLContextFactory");
Properties props = new Properties();
ClassPathResource r = new ClassPathResource("cert.jks");
props.setProperty("keyStore", "/" + r.getFile().getAbsolutePath());
props.setProperty("keyStorePassword", "password");
props.setProperty("keyManagerAlgorithm", "SunX509");
props.setProperty("trustManagerAlgorithm", "SunX509");
props.setProperty("protocol", "tls");
sslConfig.setProperties(props);
return sslConfig;
}
两个客户端&服务器都能够相互通信。事实上,如果我禁用SSL就像魅力一样。任何帮助深表感谢。
我使用HZ V 3.2.6 [非企业] http://docs.hazelcast.org/docs/3.2/manual/html/ssl.html – anil 2014-09-29 11:04:29
我注意到一些很奇怪的东西,它工作正常时客户端和服务器在同一台机器上。然而,在分布式设置中,我不断收到此异常。 – anil 2014-09-30 08:15:23