2017-01-12 2 views
0

私はキーを持つ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); 

わかりましたら教えてください。また私はこの質問を私の以前のものと結びつけています。これでうまくいかなかった場合、この質問にもその内容が追加されます。

+0

ノード1がデータを入力し、ノード2がヌルに戻る場合、これはノード1とノード2が結合していないことを示します。あなたはログを投稿できますか? –

+0

データはほぼ30-40分後にプッシュされ、両方のノードがそれを使用してプッシュされました。しかし、10回のコールのうち、2〜3回のコールのうち、ノードに関係なく「NULL」を取得しています。 – Navnath

+0

Plzは完全なhazelcast.xmlとコードをどのように値を取得しようとしているのか投稿します。また、小さなテストケースでこれを複製できれば、それは私たちを助けるでしょう。 –

答えて

関連する問題