【问题标题】:How to set Apache Ignite Cache?如何设置 Apache Ignite 缓存?
【发布时间】: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 什么都没有。只是关于异常的那一行

标签: java caching ignite


【解决方案1】:

我认为当您尝试在每个节点启动时激活集群时存在错误。也许是IGNITE-10417

请记住,当所有节点都准备好​​时,您只需要激活一次集群,而不是每次都调用 active() 以防万一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2021-11-17
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多