每当我重新启动hazelcast服务器时,无需在spring boot中重新启动客户端。我收到了以下错误:
03-01-2018 16:44:17.966 [http-nio-8080-exec-7] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet].log - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.hazelcast.client.HazelcastClientNotActiveException: Partition does not have owner. partitionId : 203] with root cause
java.io.IOException: Partition does not have owner. partitionId : 203
at com.hazelcast.client.spi.impl.ClientSmartInvocationServiceImpl.invokeOnPartitionOwner(ClientSmartInvocationServiceImpl.java:43)
at com.hazelcast.client.spi.impl.ClientInvocation.invokeOnSelection(ClientInvocation.java:142)
at com.hazelcast.client.spi.impl.ClientInvocation.invoke(ClientInvocation.java:122)
at com.hazelcast.client.spi.ClientProxy.invokeOnPartition(ClientProxy.java:152)
at com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:147)
at com.hazelcast.client.proxy.ClientMapProxy.getInternal(ClientMapProxy.java:245)
at com.hazelcast.client.proxy.ClientMapProxy.get(ClientMapProxy.java:240)
at com.hazelcast.spring.cache.HazelcastCache.lookup(HazelcastCache.java:139)
at com.hazelcast.spring.cache.HazelcastCache.get(HazelcastCache.java:57)
at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:71)
如果我启用了热重启,问题就解决了。但有没有办法恢复客户端应用程序而不重新启动它并禁用热重启?
答案 0 :(得分:1)
如果连接断开,Hazelcast客户端会尝试重新连接到群集。它使用ClientNetworkConfig.connectionAttemptLimit
和ClientNetworkConfig.connectionAttemptPeriod
元素来配置尝试的频率。 connectionAttemptLimit
定义断开连接的尝试次数,connectionAttemptPeriod
定义两次重试之间的时间间隔(ms)。请参阅下面的用法示例:
ClientConfig clientConfig = new ClientConfig();
clientConfig.getNetworkConfig().setConnectionAttemptLimit(5);
clientConfig.getNetworkConfig().setConnectionAttemptPeriod(5000);
从Hazelcast 3.9开始,您可以使用reconnect-mode
属性来配置客户端在断开连接后重新连接到群集的方式。它有三个选项:
OFF
禁用重新连接。 ON
以阻塞方式启用重新连接,其中所有等待的调用都将被阻止,直到群集连接建立或失败。 ASYNC
以非阻塞方式启用重新连接,其中所有等待的调用都将收到HazelcastClientOfflineException
。 其默认值为ON
。您可以在下面看到配置示例:
ClientConfig clientConfig = new ClientConfig();
clientConfig.getConnectionStrategyConfig()
.setReconnectMode(ClientConnectionStrategyConfig.ReconnectMode.ON);
通过使用这些配置元素,您可以在不重新启动的情况下恢复客户端。