【问题标题】:HazelCast max-idle-seconds :evict listener is not workingHazelCast max-idle-seconds:驱逐侦听器不起作用
【发布时间】:2016-10-17 09:23:19
【问题描述】:

地图的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());
    }

}

【问题讨论】:

  • 能贴出com.test.listener.SessionListener类的实现吗?
  • 在问题中添加了侦听器类实现。谢谢。

标签: hazelcast evict


【解决方案1】:

以下是建议:

  1. 在您的地图配置中包含Eviction policy 配置。目前驱逐仅基于 max-idle-seconds。
  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) {

    }
    }

【讨论】:

  • Thanks.Issue : Listener 无法始终如一地工作。大多数情况下,在空闲超时不起作用后,evict listener 无法捕获事件或驱逐地图中的特定键
  • 你能写一个测试类来复现这个问题吗?
  • 经过多次跟踪和错误后,发现值被驱逐:但驱逐侦听器无法在预定义的超时后捕获该事件。侦听器能够在一段时间后捕获该事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多