Jens D комментарии, вы можете попробовать locator-wait-time
GemFire (System). Однако, как указывает documentation ...
Число секунд, что член должен ждать для локатора, чтобы начать, если локатор не доступен при попытке присоединиться к распределенной системе. Используйте этот параметр при запуске локаторов и сверстников одновременно. Этот тайм-аут позволяет сверстникам дождаться, когда локаторы закончат запуск, прежде чем пытаться присоединиться к распределенной системе.
Это конкретно относится к «равноправному члену», соединяющему распределенную систему/кластер и, следовательно, может не иметь никакого эффекта от клиента (кеша).
В этом случае я использовал другие методы, используя Spring (в частности, в тестах интеграции, включающих топологию клиент/сервер), чтобы заставить клиент блокировать ожидание появления сервера (или локатора). В моих тестах тест запускает отдельный JVM-процесс GemFire для запуска сервера, в то время как тестовая VM служит клиентом кэша.
Вы можете увидеть примеры этого в моих последних усилиях по разработке, объединив GemFire с Spring Session, в частности, в образце httpsession-gemfire-clientserver.
Здесь я использовал BeanPostProcessor
, что приводит к тому, что кэш клиента, а конкретно PoolFactoryBean/Pool, чтобы заблокировать (в postProcessBeforeInitialization(..)
) предотвращение пула не полностью инициализирован, пока сервер не доступен (может также применяться к Locator).
wait только attempts to open a Socket connection to the Server (или локатор) для проверки возможности подключения.
Другой подход заключается в create a CountDownLatch
, использовать его в registered GemFire ClientMembershipListener
и объединить его с, опять же, в BeanPostProcessor
только в postProcessAfterInitialization(..)
методе этот раз.
Технически необходимо использовать только один из двух подходов. Хотя, я использовал это для тестирования, это может быть использовано и не является редкостью для реального приложения.
В идеале, однако, вы начинаете свои локаторы раньше всего, так как от этого зависит создание кластера.
Надеюсь, это поможет.
Cheers! John
Возможно, вы захотите попробовать установить свойство GemFire 'locator-wait-time'. Я считаю, что это было введено в 8.1 и позволяет серверу подождать указанное время, чтобы локатор стал доступен. –