簡體   English   中英

IGNITE緩存錯誤

[英]IGNITE Cache Error

我們使用Apache Ignite進行緩存,在測試過程中遇到了此錯誤

java.lang.IllegalStateException:緩存已關閉或破壞

我們有一個Spring Restful客戶端,其中嵌入了IGNITE。 調用來更新和從緩存中刪除。

發生的步驟如下

  1. Ignite服務器正在運行的一個實例。
  2. 帶有Ignite Embedded的另一台服務器上運行的Restful客戶端實例。
  3. 殺死了Ignite服務器實例,客戶端仍在運行
  4. Ignite服務器重新啟動。
  5. 客戶端對緩存中的值進行任何嘗試都會導致上述異常。
  6. 如果客戶端重新啟動,一切正常

有人可以就為什么會發生這種情況發表一些見解嗎? 我是否必須處理所有節點離開並手動退出緩存或其他事件的事件。

任何幫助表示贊賞

萬一所有服務器都宕機,客戶端將以新的ID重新加入(就像您手動重新啟動它一樣)。 在這種情況下,所有現有的緩存實例都將關閉,您必須獲取新的實例(使用Ignite.cache(...)方法)。

有一張票可以改善這種行為: https : //issues.apache.org/jira/browse/IGNITE-2766

我們也遇到了這個問題,我們有一個解決方法。 我們實現了自己的SpringCacheManager版本(ReconnectSafeSpringCacheManager),該版本將緩存對象包裝在重新連接安全的緩存代理對象(ReconnectSafeCacheProxy)中。

當其中一個緩存代理捕獲到IllegalStateException ,我們告訴緩存管理器刪除該緩存(從內部caches映射中將其刪除),然后調用ReconnectSafeSpringCacheManager.getCache(<cacheName>)來重新創建Ignite緩存實例。 代理將其緩存引用替換為新的Ignite緩存,然后重試導致異常的操作。

我們的方法要求我們將緩存管理器代碼放置在org.apache.ignite.cache.spring包中,因為SpringCacheManager中有對非公共API:s的引用,這不是最干凈的方法,但它似乎可以工作,我們解決IGNITE-2786時,計划刪除解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM