#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:
Ниже приведены рекомендации:
- Включите настройки политики выселения в конфигурацию вашей карты. Прямо сейчас выселение происходит только на основе max-idle-seconds.
- Реализуйте все методы из интерфейса EntryListener, который в свою очередь расширяет другие интерфейсы.
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. После многих ошибок и ошибок обнаружено, что значение выселяется: но слушатель выселения не может перехватить это событие после предопределенного тайм-аута. Слушатель может перехватить это событие через некоторое время.