当max-size-policy为USED_HEAP_SIZE时,Hazelcast Eviction不使用Spring。使用max-size-policy作为PER_NODE可以正常工作

时间:2015-03-20 17:43:56

标签: java spring apache-camel hazelcast

此问题适用于任何Hazelcast版本。 (试过3.2.x,3.3.x,3.4.x)我已经指定了需要发生的驱逐条件,以防止内存不足错误。但是虽然我已经提到了max-size,但当策略为PER_NODE时触发USED_HEAP_SIZE是策略时不会触发Eviction。

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

我将Evict作为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();
    }

}

1 个答案:

答案 0 :(得分:1)

您必须将in-memory-format="OBJECT"更改为in-memory-format="BINARY"

目前此请求有一个PRD:https://hazelcast.atlassian.net/wiki/display/COM/HEP+3+-+Entry+Cost+Calculator+SPI

如果你想要,你可以为hazelcast做贡献:)