2017-01-12 2 views
0

키가있는 Hazelcast에 하나의지도가 있고 값은 IMap입니다. 이제 나와 함께 두 개의 노드가 있습니다. 문제는 내가 Hazelcast지도에서 값 객체를 얻으려고 할 때, 어떤 시간에 나에게 NULL을 반환하고 바로 다음 호출이라고해도 괜찮습니다. 이 문제가 당분간은 잘 작동하기 때문에 코드에 문제가 없다고 생각합니다. 여기에 내지도 구성을 hazelcast.xml 파일에서 공유하고 있습니다.Hazelcast IMap 때때로지도에지도가 있어도 null 값 객체를 반환합니다.

<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> 

입니다. 내 키가 변경할 수있는 시간 변수가 포함되어 있습니다. Desai 씨가 바이너리 데이터를 기반으로 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가 null을 반환하면 노드 1과 노드 2가 서로 조인되지 않았 음을 나타냅니다. 로그를 올리실 수 있습니까? –

+0

데이터가 거의 30-40 분 뒤로 밀렸으며 두 노드는 모두이를 사용했습니다. 그러나 10 회 호출 중 거의 2 ~ 3 번은 노드와 관계없이 'NULL'을 얻고 있습니다. – Navnath

+0

Plz는 hazelcast.xml 전체와 코드 값을 가져 오는 방법을 게시합니다. 또한, 작은 테스트 케이스에서 이것을 복제 할 수 있다면, 그것은 우리를 도울 것입니다. –

답변