HazelCast max-idle-seconds:逐出监听器无效

时间:2016-10-17 09:23:20

标签: hazelcast evict

地图的hazelcast配置是

    <map name="test">
      <max-idle-seconds>120</max-idle-seconds>
    <entry-listeners>
        <entry-listener include-value="true" local="false">com.test.listener.SessionListener</entry-listener>
    </entry-listeners>
   </map>

我为evict操作配置了一个监听器。 听众无法持续捕捉驱逐行动。 Hazelcast版本:3.6.5

监听器类实现:

public class SessionListener implements EntryListener<String, Object> {
@Override
public void entryEvicted(EntryEvent<String, Object> evictData) {

    try {
        Session sessionObjValue = (Session) evictData.getOldValue();
        String sessionId = sessionObjValue.getSessionId();
        String userName = sessionObjValue.getUsername();

        JSONObject inputJSON = new JSONObject();
        inputJSON.put(Constants.SESSIONID, sessionId);
        inputJSON.put(Constants.USER_NAME, userName);
        //Operations to be performed based on the JSON Value


    } catch (Exception exception) {
        LOGGER.logDebug(Constants.ERROR, methodName, exception.toString());
    }

}

1 个答案:

答案 0 :(得分:0)

以下是建议:

  1. 在地图配置中包含Eviction policy个配置。现在驱逐只发生在max-idle-seconds。
  2. 实现EntryListener接口中的所有方法,其中包括扩展其他接口。
  3. 同时实施EntryExpiredListener侦听器,以明确捕获到期事件,但也将在到期期间调用evict事件。
  4. 示例代码:

        public class MapEntryListernerTest implements EntryListener, EntryExpiredListener {
    
    
        @Override
        public void entryAdded(EntryEvent event) {
    
        }
    
        @Override
        public void entryEvicted(EntryEvent event) {
    
        }
    
        @Override
        public void entryRemoved(EntryEvent event) {
    
        }
    
        @Override
        public void entryUpdated(EntryEvent event) {
    
        }
    
        @Override
        public void mapCleared(MapEvent event) {
    
        }
    
        @Override
        public void mapEvicted(MapEvent event) {
    
        }
    
        @Override
        public void entryExpired(EntryEvent event) {
    
        }
        }