Эта проблема для любых версий Hazelcast. (Tried 3.2.x, 3.3.x, 3.4.x) Я определил условия высева ниже, что должно происходить для предотвращения ошибки в памяти. Но хотя я упомянул о максимальном размере, Eviction не запускается, когда USED_HEAP_SIZE является политикой, пока она запускается, когда политика PER_NODE.
<hz:map name="aggregateCache" eviction-policy="LRU" in-memory-format="OBJECT"
statistics-enabled="true"
eviction-percentage="25"
max-size="120"
max-size-policy="USED_HEAP_SIZE">
<hz:entry-listeners>
<hz:entry-listener
include-value="true"
implementation="messageEventListener" />
</hz:entry-listeners>
</hz:map>
<bean id="messageEventListener"
class="com.manheim.webservices.ovcoutbound.cep.cache.MessageEventListener" />
Я вызываю Eviction как часть класса MessageEventListener, как показано ниже. Открытый класс MessageEventListener реализует функцию EntryListener {
private static final String EVICTED_MESSAGES= "direct:evictedAggregateCacheMessages";
@Override
public void entryEvicted(EntryEvent<String, HubMessageAggregate> event) {
try{
HubMessageAggregate aggregate = event.getOldValue();
exchange.getIn().setBody(aggregate);
template.send(EVICTED_MESSAGES, exchange);
}
catch(Exception e){
String error = "Unable to process the Evicted message properly with the Key " +
event.getKey();
}
}
Вы должны изменить in-memory-format="OBJECT"
in-memory-format="BINARY"
И в настоящее время существует PRD для этого запроса: https://hazelcast.atlassian.net/wiki/display/COM/HEP+3+-+Entry+Cost+Calculator+SPI
Если вы хотите, вы можете внести свой вклад в hazelcast :)