2

地图的 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>

我为驱逐操作配置了一个侦听器。Listener 无法始终如一地捕捉到 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());
    }

}
4

1 回答 1

0

以下是建议:

  1. 在您的地图配置中包含驱逐策略配置。现在驱逐仅基于最大空闲秒数。
  2. 实现 EntryListener 接口中的所有方法,这些方法又扩展了其他接口。
  3. 还实现EntryExpiredListener侦听器,以显式捕获到期事件,尽管在到期期间也会调用 evict 事件。

示例代码:

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

    }
    }
于 2016-10-17T13:39:25.877 回答