HazelCast max-idle-seconds: не работает слушатель для удаления

#hazelcast #evict

#hazelcast #удалить

Вопрос:

конфигурация 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>
 

У меня есть прослушиватель, настроенный для действия выселения.
Слушатель не может последовательно перехватывать действие выселения.
Версия 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. Можете ли вы опубликовать реализацию com.test.listener.SessionListener class?

2. Добавлена реализация класса слушателя в вопросе. Спасибо.

Ответ №1:

Ниже приведены рекомендации:

  1. Включите настройки политики выселения в конфигурацию вашей карты. Прямо сейчас выселение происходит только на основе max-idle-seconds.
  2. Реализуйте все методы из интерфейса EntryListener, который в свою очередь расширяет другие интерфейсы.
  3. EntryExpiredListener Также внедрите прослушиватель, чтобы явно перехватывать события истечения срока действия, хотя событие выселения также будет вызываться во время истечения срока действия.

Пример кода:

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

    }
    }
 

Комментарии:

1. Спасибо. Проблема: прослушиватель работает нерегулярно. В большинстве случаев прослушиватель выселения не может перехватить событие или удалить конкретный ключ на карте после того, как время ожидания ожидания не работает

2. Можете ли вы написать тестовый класс для репликации проблемы?

3. После многих ошибок и ошибок обнаружено, что значение выселяется: но слушатель выселения не может перехватить это событие после предопределенного тайм-аута. Слушатель может перехватить это событие через некоторое время.