我有一个带有2个节点的HazelCast服务器设置,服务器一直很健康,从未出现任何问题。我的客户来自弹簧批次的多个实例,每个弹簧批次有120个线程,有五个弹簧批次实例,这意味着可能有大约120 * 5 = 600个线程试图访问IMap来设置/获取值。
当我开始批量处理的3个实例时,在IMap中设置值所花费的时间超过50秒并且慢慢地抛出以下异常:
com.hazelcast.spi.exception.TargetDisconnectedException
at com.hazelcast.client.spi.impl.ClientCallFuture.get(ClientCallFuture.java:128)
at com.hazelcast.client.spi.impl.ClientCallFuture.get(ClientCallFuture.java:111)
at com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:110)
at com.hazelcast.client.proxy.ClientMapProxy.set(ClientMapProxy.java:380)
at com.ebay.app.raptor.dfmailbat.components.cache.client.processor.CacheClient.setDealsResponseInCache(CacheClient.java:101)
at com.ebay.app.raptor.dfmailbat.components.deal.finder.service.manager.DealFinderManager.getDeals(DealFinderManager.java:59)
每个Spring都有一个静态的IMap实例,并使用相同的实例来设置/获取值。像这样:
static {
ClientConfig clientConfig = new ClientConfig();
List<String> addresses = getClusterAddresses();
if (addresses != null) {
clientConfig.getNetworkConfig().setAddresses(addresses);
s_client = HazelcastClient.newHazelcastClient(clientConfig);
}
else {
s_logger.log(LogLevel.ERROR, "No host in Database for hazelcast client set up");
}
if (s_client != null) {
s_map = s_client.getMap("ItemDealsMap");
}
}
所有线程都使用s_map来设置/获取IMap中的条目。当我将条目设置为IMap时,我将驱逐时间设置为12小时。我在服务器和客户端上都使用HazelCast 3.3。当并发线程数增加时,此问题始终可以重现。当我关闭弹簧批次并重新开始时,它运行良好。你能帮我解决这个问题。