私はキーを持つHazelcastに1つのマップを持ち、値はIMap
です。今私は私と2つのノードを持っています。問題は、私がHazelcastマップから値オブジェクトを取得しようとしているときに、それが私にNULL
と非常に次の呼び出しを返したときにうまくいきます。これはしばらくの間うまくいきますので、コードに問題はないと思います。ここでは、マップ設定をhazelcast.xml
ファイルから共有しています。Hazelcast IMap sometimeはマップ内に存在していてもヌル値オブジェクトを返します
<map name="MY_HAZELCAST_MAP">
<in-memory-format>OBJECT</in-memory-format>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>1000</time-to-live-seconds>
<eviction-percentage>25</eviction-percentage>
<max-size policy="PER_NODE">3000</max-size>
<cache-deserialized-values>ALWAYS</cache-deserialized-values>
<merge-policy>com.hazelcast.map.merge.PassThroughMergePolicy</merge-policy>
</map>
私が間違った設定を行っている場合はお知らせください。 hazelcast-all-3.7.3.jar
を使用します。
は、ここで私が投稿しているサンプルコード参照してくださいNot able to retrieve element from Hazelcast's Map if using custom object as a keyについてhazelcast.xmlファイル
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.6.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<properties>
<property name="instance.name">MY_INSTANCE</property>
<property name="hazelcast.logging.type">log4j</property>
</properties>
<group>
<name>dev1</name>
<password>dev-pass</password>
</group>
<management-center enabled="false">http://localhost:8080/mancenter</management-center>
<network>
<port auto-increment="false" port-count="100">51253</port>
<outbound-ports>
<ports>0</ports>
</outbound-ports>
<join>
<multicast enabled="false"/>
<tcp-ip enabled="true">
<member-list>
<member>192.168.1.87:51253</member>
</member-list>
</tcp-ip>
<discovery-strategies>
</discovery-strategies>
</join>
<ssl enabled="false"/>
<socket-interceptor enabled="false"/>
<symmetric-encryption enabled="false">
<algorithm>PBEWithMD5AndDES</algorithm>
<salt>thesalt</salt>
<password>thepass</password>
<iteration-count>19</iteration-count>
</symmetric-encryption>
</network>
<partition-group enabled="false"/>
<executor-service name="default">
<pool-size>16</pool-size>
<queue-capacity>0</queue-capacity>
</executor-service>
<queue name="default">
<max-size>0</max-size>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<empty-queue-ttl>-1</empty-queue-ttl>
</queue>
<map name="MY_HAZELCAST_MAP">
<in-memory-format>OBJECT</in-memory-format>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>1000</time-to-live-seconds>
<eviction-percentage>25</eviction-percentage>
<max-size policy="PER_NODE">3000</max-size>
<cache-deserialized-values>ALWAYS</cache-deserialized-values>
<merge-policy>com.hazelcast.map.merge.PassThroughMergePolicy</merge-policy>
</map>
<map name="default">
<in-memory-format>BINARY</in-memory-format>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>100</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
</map>
<multimap name="default">
<backup-count>1</backup-count>
<value-collection-type>SET</value-collection-type>
</multimap>
<list name="default">
<backup-count>1</backup-count>
</list>
<set name="default">
<backup-count>1</backup-count>
</set>
<jobtracker name="default">
<max-thread-size>0</max-thread-size>
<queue-size>0</queue-size>
<retry-count>0</retry-count>
<chunk-size>1000</chunk-size>
<communicate-stats>true</communicate-stats>
<topology-changed-strategy>CANCEL_RUNNING_OPERATION</topology-changed-strategy>
</jobtracker>
<semaphore name="default">
<initial-permits>0</initial-permits>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
</semaphore>
<reliable-topic name="default">
<read-batch-size>10</read-batch-size>
<topic-overload-policy>BLOCK</topic-overload-policy>
<statistics-enabled>true</statistics-enabled>
</reliable-topic>
<ringbuffer name="default">
<capacity>10000</capacity>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>30</time-to-live-seconds>
<in-memory-format>BINARY</in-memory-format>
</ringbuffer>
<serialization>
<portable-version>0</portable-version>
</serialization>
<services enable-defaults="true"/>
<lite-member enabled="false"/>
</hazelcast>
です。私のキーには変更可能な時間変数が含まれています。デサイ氏は、バイナリデータに基づいてヘーゼルキャストキーを検索する方法について言及しました。ここではIMapからの実際のキーを使用して、値オブジェクトを取得するためにさらに使用する行を示します。
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
private static ConcurrentMap<HMapKey, String> testMap = instance.getMap("MY_HAZELCAST_MAP");
testMap.put(new HMapKey("code1",123), "This is Code 1");
....
....
....
// While retrieving
private static ConcurrentMap<HMapKey, String> testMap2 = instance.getMap("MY_HAZELCAST_MAP");
HMapKey key = new HMapKey("code1",0);
key = ArrayList<HMapKey>(testMap2.keySet()).get(new ArrayList<HMapKey>(testMap2.keySet()).indexOf(key));
String MapValue = testMap2.get(key);
わかりましたら教えてください。また私はこの質問を私の以前のものと結びつけています。これでうまくいかなかった場合、この質問にもその内容が追加されます。
ノード1がデータを入力し、ノード2がヌルに戻る場合、これはノード1とノード2が結合していないことを示します。あなたはログを投稿できますか? –
データはほぼ30-40分後にプッシュされ、両方のノードがそれを使用してプッシュされました。しかし、10回のコールのうち、2〜3回のコールのうち、ノードに関係なく「NULL」を取得しています。 – Navnath
Plzは完全なhazelcast.xmlとコードをどのように値を取得しようとしているのか投稿します。また、小さなテストケースでこれを複製できれば、それは私たちを助けるでしょう。 –