Hazelcast 3.7.4 не может повторно инициализировать карту
Hazelcast не может переустановить карту из MapLoader в случае неудачной первой попытки. MapLoader загружает данные из базы данных.
Прецедент:
- Начать член сервера
- Начать клиента
- Разорвать связь с базой данных
- Попробуйте получить данные из Hazelcast Map (инициирует отложенную загрузку из MapLoader). Соблюдайте исключение.
- Восстановить соединение с БД
- Повторите шаг 4. Исключение из шага 4 повторяется.
В результате Hazelcast переходит в состояние, когда Map вообще не может быть инициализирована без перезапуска.
Вы встречали такое поведение?
Посоветуйте, пожалуйста, обходной путь или решение?
ОБНОВИТЬ:
Такое поведение воспроизводится, если вызвать map.keySet() со стороны клиента.
2 ответа
После долгого исследования причина проблемы не была найдена, но карта Hazelcast восстанавливается, если после сбоя инициализация вызывает map.size(). Это довольно странно, но это работает.
Когда вы пытаетесь получить / поместить / удалить данные на карте, Hazelcast только звонки, связанные MapStore
а также MapLoader
методы. Не существует специального вызова метода для инициализации ваших соединений с БД (Hazelcast предоставляет MapLoaderLifecycleSupport
интерфейс для инициализации реализации MapLoader, но его init()
метод снова вызывается только тогда, когда карта впервые используется в экземпляре Hazelcast, а не каждый раз, когда вы выполняете операции с картой).
Таким образом, Вы должны решить проблемы с подключением к базе данных самостоятельно, в своем MapStore
реализация. Например; когда вы пытаетесь поместить / прочитать / удалить данные в / из вашей БД в реализации, вам необходимо проверить соединение и повторно установить его, если оно не существует.