【发布时间】:2020-07-07 10:55:05
【问题描述】:
这是我当前的 Apache Ignite 设置:
public class IgniteCacheConfig {
@Bean
public Ignite applicationIgnite() {
Ignite ignite = Ignition.start(igniteConfiguration());
ignite.cluster().active(true);
return ignite;
}
@Bean
public CacheConfiguration<String, AppRequest> applicationCacheConfig() {
CacheConfiguration<String, AppRequest> cfg = new CacheConfiguration<>();
int isPartitionMode = 0;
int backups = 0;
CacheMode cacheMode = CacheMode.PARTITIONED;
if (0 == isPartitionMode) {
cacheMode = CacheMode.REPLICATED;
}
cfg.setName("appCache");
cfg.setCacheMode(cacheMode);
cfg.setBackups(backups);
cfg.setPartitionLossPolicy(PartitionLossPolicy.IGNORE);
cfg.setDataRegionName("DA-1");
cfg.setDefaultLockTimeout(0L);
cfg.setExpiryPolicyFactory(CreatedExpiryPolicy
.factoryOf(new Duration(SECONDS, 3600)));
cfg.setOnheapCacheEnabled(false);
cfg.setStatisticsEnabled(true);
return cfg;
}
private IgniteConfiguration igniteConfiguration() {
IgniteConfiguration cacheConfig = new IgniteConfiguration();
cacheConfig.setClientMode(false);
TransactionConfiguration transactionConfig = new TransactionConfiguration();
transactionConfig.setDefaultTxTimeout(0L);
cacheConfig.setTransactionConfiguration(transactionConfig);
cacheConfig.setFailureDetectionTimeout(10000L);
cacheConfig.setIgniteInstanceName("appListener");
DataStorageConfiguration dsCfg = new DataStorageConfiguration();
dsCfg.setConcurrencyLevel(32);
DataRegionConfiguration defaultRegionConf = new DataRegionConfiguration();
defaultRegionConf.setName("DA-1");
defaultRegionConf.setInitialSize(1024 * 1024 * 100);
defaultRegionConf.setMaxSize(1024 * 1024 * 500);
defaultRegionConf.setEmptyPagesPoolSize(256);
defaultRegionConf.setEvictionThreshold(0.8);
defaultRegionConf.setPageEvictionMode(DataPageEvictionMode.RANDOM_2_LRU);
defaultRegionConf.setPersistenceEnabled(true);
dsCfg.setDefaultDataRegionConfiguration(defaultRegionConf);
cacheConfig.setDataStorageConfiguration(dsCfg);
TcpDiscoverySpi tcpDiscovery = new TcpDiscoverySpi();
tcpDiscovery.setLocalPort(47500);
tcpDiscovery.setAckTimeout(5000L);
tcpDiscovery.setSocketTimeout(5000L);
tcpDiscovery.setNetworkTimeout(5000L);
tcpDiscovery.setStatisticsPrintFrequency(1000 * 60 * 15);
final Set<String> mcastAddCol = Collections.singleton("127.0.0.1:47500..47509");
final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder()
.setAddresses(mcastAddCol);
tcpDiscovery.setIpFinder(ipFinder);
cacheConfig.setDiscoverySpi(tcpDiscovery);
TcpCommunicationSpi communicationSpi = new TcpCommunicationSpi();
communicationSpi.setSocketWriteTimeout(5000L);
communicationSpi.setConnectTimeout(5000L);
cacheConfig.setCommunicationSpi(communicationSpi);
return cacheConfig;
}
}
这是我的任务 对于缓存(内存中分布式),将使用 Apache Ignite 2.7 版本,集群将单独部署。有必要实现与集群的连接,在使用 Ignite 失败时在后台重新连接。如果由于某种原因集群不可用,则输出到日志中,假设缓存中没有找到任何内容。
现在我收到一个错误:
Caused by: class org.apache.ignite.IgniteException: Failed to activate cluster
您能否建议我启动集群并实现我因失败而重新连接的任务的任何解决方案?
【问题讨论】:
-
该异常是否有堆栈跟踪?日志中有什么有趣的事情吗?
-
@alamar 什么都没有。只是关于异常的那一行