Java 点火缓存错误
我们使用ApacheIgnite进行缓存,在测试期间,我遇到了这个错误 java.lang.IllegalStateException:缓存已关闭或销毁 我们有一个内置IGNITE的Spring Restful客户端。调用来更新和从缓存中删除 发生的步骤如下所示Java 点火缓存错误,java,spring,caching,ignite,Java,Spring,Caching,Ignite,我们使用ApacheIgnite进行缓存,在测试期间,我遇到了这个错误 java.lang.IllegalStateException:缓存已关闭或销毁 我们有一个内置IGNITE的Spring Restful客户端。调用来更新和从缓存中删除 发生的步骤如下所示 Ignite服务器的一个实例正在运行 在不同服务器上运行的Restful客户端的一个实例 点燃嵌入式 已终止Ignite服务器实例,客户端仍在运行 Ignite服务器已重新启动 客户端在缓存中放入值的任何尝试都会导致上述错误 例外 如果
任何帮助都会显示出来如果所有服务器都停机,客户端将使用新ID重新连接(就像手动重新启动它一样)。在这种情况下,所有现有缓存实例都将关闭,您必须获取新实例(使用
Ignite.cache(…)
method)
有一种方法可以改进这种行为:如果所有服务器都停机,客户端将使用新ID重新加入(就像手动重新启动它一样)。在这种情况下,所有现有缓存实例都将关闭,您必须获取新实例(使用
Ignite.cache(…)
method)
有一张票可以改善这种行为:我们也遇到了这个问题,我们有一个解决办法。我们实现了我们自己版本的SpringCacheManager(ReconnectSafeSpringCacheManager),它将缓存对象包装在重新连接安全缓存代理对象(ReconnectSafeCacheProxy)中 当一个缓存代理捕获到
IllegalStateException
时,我们会告诉缓存管理器删除该缓存(将其从内部caches
map中删除),然后调用ReconnectSafeSpringCacheManager.getCache()
,重新创建Ignite缓存实例。代理使用新的Ignite缓存替换其缓存引用,然后重试导致异常的操作
我们的方法要求我们将缓存管理器代码放在
org.apache.ignite.cache.spring
包中,因为SpringCacheManager中有对非公共API:s的引用,这不是最干净的方法,但它似乎有效,我们计划在解决问题后取消变通办法。我们也遇到了这个问题,我们有变通办法。我们实现了我们自己版本的SpringCacheManager(ReconnectSafeSpringCacheManager),它将缓存对象包装在重新连接安全缓存代理对象(ReconnectSafeCacheProxy)中
当一个缓存代理捕获到IllegalStateException
时,我们会告诉缓存管理器删除该缓存(将其从内部caches
map中删除),然后调用ReconnectSafeSpringCacheManager.getCache()
,重新创建Ignite缓存实例。代理使用新的Ignite缓存替换其缓存引用,然后重试导致异常的操作
我们的方法要求我们将缓存管理器代码放在
org.apache.ignite.cache.spring
包中,因为SpringCacheManager中有对非公共API:s的引用,这不是最干净的方法,但它似乎可以工作,我们计划在解决问题后删除该解决方法。无法ignite.getOrCreateCache(cfg);help hereYha我正在尝试使用上述方法,但使用的缓存名称与服务器停机前使用的相同。我在客户端使用spring缓存。导致问题的是客户端的过时实例吗?。有没有办法在不重新启动客户端的情况下解决此问题?对于Spring缓存,除了重新启动客户端之外,没有其他解决方法。这将在下一个版本中修复:无法点燃.getOrCreateCache(cfg);help hereYha我正在尝试使用上述方法,但使用的缓存名称与服务器停机前使用的相同。我在客户端使用spring缓存。导致问题的是客户端的过时实例吗?。有没有办法在不重新启动客户端的情况下解决此问题?对于Spring缓存,除了重新启动客户端之外,没有其他解决方法。这将在下一版本中修复: