#gemfire #spring-data-gemfire
#gemfire #spring-data-gemfire
Вопрос:
У меня есть кластер GemFire с 2 локаторами и 2 серверами на двух машинах Unix. Я запускаю приложение Spring Boot, которое присоединяется к кластеру GemFire в качестве однорангового узла и пытается создать реплицированные регионы, загружая регионы с использованием Spring Data GemFire. После завершения работы приложения Spring Boot я не вижу регион / данные в кластере.
Я что-то здесь упускаю?
GemFire cluster не использует cache.xml
или Spring XML для начальной загрузки регионов. Моя идея состоит в том, чтобы создать регионы с помощью автономной программы и сделать ее доступной в кластере. Версия SDGF является 2.0.7
.
gemfire-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="gemfireProperties">
<prop key="locators">unix_machine1[10334],unix_machine2[10334]</prop>
<prop key="mcast-port">0</prop>
</util:properties>
<bean id="autoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
<gfe:cache properties-ref="gemfireProperties" pdx-serializer-ref="autoSerializer" pdx-read-serialized="true"/>
<gfe:replicated-region id="Test" ignore-if-exists="true"/>
<gfe:replicated-region id="xyz" ignore-if-exists="true"/>
</beans>
Ожидается, что при завершении работы приложения Spring Boot регион должен быть создан в кластере.
Ответ №1:
Самым простым подходом здесь было бы использовать службу конфигурации кластера и создавать регионы через gfsh. Смотрите ссылку ниже для получения дополнительной информации
https://docs.spring.io/spring-gemfire/docs/current/reference/html/#bootstrap:cache:advanced
Смотрите раздел Использование конфигурации на основе кластера
Для получения дополнительной информации о конфигурации кластера, пожалуйста, смотрите ссылку ниже
http://gemfire.docs.pivotal.io/97/geode/configuring/cluster_config/gfsh_persist.html
Ваш клиентский код, вероятно, является простым клиентом gemfire, подключающимся к кластеру gemfire.
Ответ №2:
Ваши ожидания неверны. Это, скажем, не ограничение Spring, а побочный эффект работы GemFire.
Если бы вы должны были настроить экземпляр однорангового кэша GemFire / члена кластера с использованием GemFire API или чистого cache.xml
, то кластер также не «запомнил» бы конфигурацию.
При использовании GemFire API cache.xml
или Spring config (либо Spring XML, либо JavaConfig) конфигурация является локальной для участника. Перед службой конфигурации кластера GemFire администраторам потребуется распространить конфигурацию (например cache.xml
) среди всех одноранговых участников, которые будут формировать кластер.
Затем появилась служба конфигурации кластера, которая позволила пользователям определять свою конфигурацию с помощью Gfsh. В Spring config при настройке / начальной загрузке элемента однорангового кэша кластера вы можете включить использование конфигурации кластера для настройки элемента, например:
<gfe:cache use-cluster-configuration="true" ... />
Как было указано здесь (пункт 4).
Однако использование Gfsh для настройки каждого объекта GemFire ( Regions
, Indexes
, DiskStores
и т.д.) Может быть довольно утомительным, особенно если у вас много регионов. Кроме того, не все разработчики хотят использовать инструмент оболочки. Некоторые команды разработчиков хотят обновить конфигурацию вместе с приложением, что имеет смысл.
Учитывая, что вы используете Spring Boot, вам следует взглянуть на Spring Boot для Pivotal GemFire, здесь.
Другой способ запустить ваш кластер — настроить и загрузить элементы с помощью Spring, а не Gfsh. У меня есть пример этого здесь. Вы, конечно, можете запустить приложение Spring Boot из командной строки, используя Spring Boot FAT JAR.
Конечно, некоторые администраторы / операторы запрещают группам разработчиков загружать кластер GemFire таким образом и вместо этого ожидают, что команды будут использовать инструменты (например, Gfsh), предоставляемые базой данных.
Если это ваш случай, то, возможно, было бы лучше разработать Spring Boot, приложения GemFire ClientCache
, подключающиеся к отдельному кластеру, который был запущен с использованием Gfsh.
Вы все еще можете выполнить очень минимальную конфигурацию, такую как:
start locator --name=LocatorOne
start server --name=ServerOne
start server --name=ServerTwo
...
А затем позвольте вашему Spring Boot, клиентскому приложению управлять конфигурацией (т. Е. Регионами, индексами и т.д.) Кластера, используя функцию принудительной настройки кластера SDG.
Есть много разных вариантов, так что выбор за вами. Вам нужно решить, что лучше всего подходит для ваших нужд.
Надеюсь, это поможет.