키가있는 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);
귀하의 이해를 돕겠습니다. 또한이 질문을 이전 질문과 연결하고 있습니다. 이것이 작동하지 않으면이 질문에 해당 내용도 추가됩니다.
노드 1이 데이터를 입력하고 노드 2가 null을 반환하면 노드 1과 노드 2가 서로 조인되지 않았 음을 나타냅니다. 로그를 올리실 수 있습니까? –
데이터가 거의 30-40 분 뒤로 밀렸으며 두 노드는 모두이를 사용했습니다. 그러나 10 회 호출 중 거의 2 ~ 3 번은 노드와 관계없이 'NULL'을 얻고 있습니다. – Navnath
Plz는 hazelcast.xml 전체와 코드 값을 가져 오는 방법을 게시합니다. 또한, 작은 테스트 케이스에서 이것을 복제 할 수 있다면, 그것은 우리를 도울 것입니다. –