【问题标题】:how to get cached data Apache ignite如何获取缓存的数据 Apache ignite
【发布时间】:2018-08-01 09:04:32
【问题描述】:

我是 Apache ignite 的新手。我正在尝试填充缓存并从缓存中读取。我创建了 2 个 java 项目,一个填充 Apache ignite 缓存,另一个打印缓存数据,但是打印缓存项目会出错。

这是我用来填充缓存的代码

public void run(String... arg0) throws Exception
{
    try (Ignite ignite = Ignition.start("ignite.xml"))
    {
        int iteration=0;

        while(true)
        {
            iteration++;
            IgniteCache<Object, Object> cache = ignite.getOrCreateCache("test cache " + iteration);
            System.out.println(""+100);
            System.out.println("Caching started for iteration " + iteration);
            printMemory();

            for (int i = 0; i < 100; i++)
            {
                cache.put(i, new CacheObject(i, "Cached integer " + i));
                System.out.println(i);
                Thread.sleep(100);

            }
            //cache.destroy();
            System.out.println("**************************************"+cache.size());
        }

    }


}

这是我用来打印缓存数据的代码

Ignition.setClientMode(true);
    IgniteConfiguration cfg = new IgniteConfiguration();        
    cfg.setPeerClassLoadingEnabled(true);
    TcpDiscoveryMulticastIpFinder discoveryMulticastIpFinder = new TcpDiscoveryMulticastIpFinder();
    Set<String> set = new HashSet<>();

    set.add("serverhost:47500..47509");
    discoveryMulticastIpFinder.setAddresses(set);

    TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
    discoverySpi.setIpFinder(discoveryMulticastIpFinder);

    cfg.setDiscoverySpi(discoverySpi);

    cfg.setPeerClassLoadingEnabled(true);
    cfg.setIncludeEventTypes(EVTS_CACHE);
    Ignite ignite = Ignition.start(cfg);

    System.out.println("***************************************************\n"+ignite.cacheNames()+"\n****************************");
    CacheConfiguration<String, BinaryObject> cacheConfiguration = new CacheConfiguration<>(CACHE_NAME);
    IgniteCache<String, BinaryObject> cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary();

这 2 个代码在不同项目中的和平,所以当第一个项目填充缓存时,我试图从另一个项目访问缓存 当我尝试访问缓存数据时发生以下错误

从读取缓存并打印它的代码返回的错误

2018 年 8 月 1 日上午 9:25:25 org.apache.ignite.logger.java.JavaLogger 错误 严重:无法启动管理器:GridManagerAdapter [enabled=true, name=o.a.i.i.managers.discovery.GridDiscoveryManager] 类 org.apache.ignite.IgniteCheckedException:无法启动 SPI:TcpDiscoverySpi [addrRslvr=null,sockTimeout=5000,ackTimeout=5000,reconCnt=10,maxAckTimeout=600000,forceSrvMode=false,clientReconnectDisabled=false] 在 org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:258) 在 org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:660) 在 org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1505) 在 org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:917) 在 org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1688) 在 org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1547) 在 org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1003) 在 org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:534) 在 org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:515) 在 org.apache.ignite.Ignition.start(Ignition.java:322) 在 test.App.main(App.java:76) 原因:类 org.apache.ignite.spi.IgniteSpiException:本地节点的编组器与远程节点的编组器不同(为确保拓扑中的所有节点具有相同的编组器,请在配置中显式配置编组器)[locMarshaller=org.apache.ignite.internal .binary.BinaryMarshaller, rmtMarshaller=org.apache.ignite.marshaller.optimized.OptimizedMarshaller, locNodeAddrs=[192.168.1.71/0:0:0:0:0:0:0:1%lo, /127.0.0.1, / 192.168.1.71], locPort=0, rmtNodeAddr=[192.168.1.71/0:0:0:0:0:0:0:1%lo, /127.0.0.1, /192.168.1.71], locNodeId=b41f0d09-5a7f -424b-b3b5-420a5e1acdf6,rmtNodeId=ff436f20-5d4b-477e-aade-837d59b1eaa7] 在 org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.checkFailedError(TcpDiscoverySpi.java:1647) 在 org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.body(ClientImpl.java:1460) 在 org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:62)

【问题讨论】:

    标签: java ignite


    【解决方案1】:

    原因:类 org.apache.ignite.spi.IgniteSpiException:本地节点的编组器与远程节点的编组器不同(为确保拓扑中的所有节点具有相同的编组器,请在配置中显式配置编组器)[locMarshaller=org.apache. ignite.internal.binary.BinaryMarshaller, rmtMarshaller=org.apache.ignite.marshaller.optimized.OptimizedMarshaller

    看起来你在 ignite.xml 中明确设置了 marshaller。请检查 xml 配置文件中的 &lt;property name="marshaller"&gt;。您应该为集群中的所有节点配置相同的编组器,否则它们将无法通信。

    【讨论】:

    • 实际上ignite xml中没有marshaller属性。我的意思是我没有添加它
    • 那你能分享 ignite.xml,让我重现它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2021-11-17
    • 2020-09-14
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多