所以我最近遇到了一個錯誤,而使用Ignite驅使我瘋了推測,認爲這篇帖子可能幫助一些迷失的靈魂在那裏所以這裏去:錯誤使用地圖作爲點燃
場景如下所示:我有一個類A,只是有一個java.util.Map字段,我正在使用它作爲點火緩存鍵映射到某個值。
我具有相同的服務的兩個實例:S1 & S2,每個運行的點燃節點。 讓我們參照實例的點燃節點作爲節點ñ和中號
兩種服務都在做有關Ignite affinityCalls,因此無論該服務的實例中使用時,點燃呼叫將轉到同一個節點。
這種情況發生的情形如下: 1.服務S1確實上Ñ並存儲的親和呼叫在Ñ的緩存的的映射的 - >值V 2 。服務S2做相同的親和力調用,並去N,但是,當試圖檢索放在步驟1中的N的緩存中的值時,它無法檢索它,就好像緩存不'不包含它。
爲了讓事情更清晰,考慮下面的僞代碼:
S1確實在步驟1以下。
IgniteCache igniteCache = ....;
Map map1 = new Map(); map1.put(「some key」,「some value」);
A cacheKey = new A(map);
igniteCache.put(keyInCache,anything);
S2確實在步驟2
IgniteCache igniteCache下面= ....;
Map map2 = new Map(); map2.put(「some key」,「some value」);
A keyToRetrieve = new A(map2);
igniteCache.contains(keyToRetrive) - > false。
儘管keyToRetrieve.equals(cacheKey)爲true。
並且緩存確實包含cacheKey。
這個問題,因爲我發現它是罪魁禍首是一個類型的主要使用地圖作爲一個字段。 因爲它似乎點燃與處理有地圖成員鍵,也爲這裏所說的麻煩:
Ignite cache.containsKey returns false although keys are equal