«1. Обзор

Apache Geode предоставляет решения для управления данными через распределенную облачную архитектуру. Было бы идеально использовать API данных Spring для доступа к данным через сервер Apache Geode.

В этом руководстве мы рассмотрим Spring Data Geode для настройки и разработки клиентского Java-приложения Apache Geode.

2. Spring Data Geode

Библиотека Spring Data Geode позволяет приложению Java настраивать сервер Apache Geode с помощью XML и аннотаций. В то же время библиотека также удобна для создания клиент-серверного приложения кэширования Apache Geode.

Библиотека Spring Data Geode похожа на Spring Data Gemfire. Помимо незначительных отличий, последний обеспечивает интеграцию с Pivotal Gemfire, который является коммерческой версией Apache Geode.

Попутно мы изучим несколько аннотаций Spring Data Geode, чтобы настроить Java-приложение в кэш-клиенте Apache Geode.

3. Зависимость Maven

Давайте добавим последнюю зависимость spring-geode-starter в наш pom.xml:

<dependency>
    <groupId>org.springframework.geode</groupId>
    <artifactId>spring-geode-starter</artifactId>
    <version>1.1.1.RELEASE</version>
</dependency>

4. Приложение @ClientCacheApplication Apache Geode с Spring Boot

Сначала создадим Spring Загрузите ClientCacheApp с помощью @SpringBootApplication:

@SpringBootApplication 
public class ClientCacheApp {
    public static void main(String[] args) {
        SpringApplication.run(ClientCacheApp.class, args); 
    } 
}

Затем, чтобы преобразовать класс ClientCacheApp в клиент кэша Apache Geode, мы добавим Spring Data Geode, предоставленный @ClientCacheApplication:

@ClientCacheApplication
// existing annotations
public class ClientCacheApp {
    // ...
}

Вот и все! Клиентское приложение кэша готово к запуску.

Однако перед запуском нашего приложения нам необходимо запустить сервер Apache Geode.

5. Запустите сервер Apache Geode

Предполагая, что Apache Geode и интерфейс командной строки gfsh уже настроены, мы можем запустить локатор с именем basicLocator, а затем сервер с именем basicServer.

Для этого запустим следующие команды в интерфейсе командной строки gfsh:

gfsh>start locator --name="basicLocator"
gfsh>start server --name="basicServer"

gfsh>list members

Как только сервер заработает, мы можем вывести список всех членов:

    Name     | Id
------------ | ------------------------------------------------------------------
basicLocator | 10.25.3.192(basicLocator:25461:locator)<ec><v0>:1024 [Coordinator]
basicServer  | 10.25.3.192(basicServer:25546)<v1>:1025

Вывод командной строки gfsh должен список локатора и сервера:

mvn spring-boot:run

Вуаля! Мы готовы запустить наше клиентское приложение кэша с помощью команды Maven:

6. Конфигурация

Давайте настроим наше клиентское приложение кэша для доступа к данным через сервер Apache Geode.

6.1. Регион

@Region("Authors")
public class Author {
    @Id
    private Long id;
    
    private String firstName;
    private String lastName;
    private int age;
}

Сначала мы создадим объект с именем Author, а затем определим его как регион Apache Geode. Регион похож на таблицу в СУБД:

Давайте рассмотрим аннотации Spring Data Geode, объявленные в объекте Author.

Для начала @Region создаст регион Authors на сервере Apache Geode для сохранения объекта Author.

Затем @Id пометит свойство как первичный ключ.

6.2. Entity

Мы можем включить сущность Author, добавив @EnableEntityDefinedRegions.

@EnableEntityDefinedRegions(basePackageClasses = Author.class)
@EnableClusterConfiguration
// existing annotations
public class ClientCacheApp {
    // ...
}

Также мы добавим @EnableClusterConfiguration, чтобы приложение могло создавать регионы на сервере Apache Geode:

gfsh>list regions

List of regions
---------------
Authors

Таким образом, перезапуск приложения создаст регионы автоматически:

6.3. Репозиторий

Далее мы добавим операции CRUD для объекта Author.

public interface AuthorRepository extends CrudRepository<Author, Long> {
}

Для этого давайте создадим репозиторий с именем AuthorRepository, который расширяет CrudRepository Spring Data:

@EnableGemfireRepositories(basePackageClasses = AuthorRepository.class)
// existing annotations
public class ClientCacheApp {
    // ...
}

Затем мы включим AuthorRepository, добавив @EnableGemfireRepositories:

Теперь мы все настроено для выполнения операций CRUD над сущностью Author с использованием таких методов, как save и findById, предоставляемых CrudRepository.

6.4. Индексы

Spring Data Geode предоставляет простой способ создания и включения индексов на сервере Apache Geode.

@EnableIndexing
// existing annotations
public class ClientCacheApp {
    // ...
}

Сначала мы добавим @EnableIndexing в класс ClientCacheApp:

public class Author {
    @Id
    private Long id;

    @Indexed
    private int age;

    // existing data members
}

Затем добавим @Indexed к свойству в классе Author:

Здесь Spring Data Geode автоматически реализует индексы на основе аннотаций, определенных в сущности Author.

Следовательно, @Id реализует индекс первичного ключа для идентификатора. Точно так же @Indexed реализует хэш-индекс для возраста.

gfsh> list indexes

Member Name | Region Path |       Name        | Type  | Indexed Expression | From Clause | Valid Index
----------- | ----------- | ----------------- | ----- | ------------------ | ----------- | -----------
basicServer | /Authors    | AuthorsAgeKeyIdx  | RANGE | age                | /Authors    | true
basicServer | /Authors    | AuthorsIdHashIdx  | RANGE | id                 | /Authors    | true

Теперь давайте перезапустим приложение и подтвердим индексы, созданные на сервере Apache Geode:

Аналогично, мы можем использовать @LuceneIndexed для создания индекса Apache Geode Lucene для типизированных свойств String.

6.5. Непрерывный запрос

«Непрерывный запрос позволяет приложению получать автоматические уведомления при изменении данных на сервере. Он соответствует запросу и опирается на модель подписки.

@Service
public class AuthorService {
    @ContinuousQuery(query = "SELECT * FROM /Authors a WHERE a.id = 1")
    public void process(CqEvent event) {
        System.out.println("Author #" + event.getKey() + " updated to " + event.getNewValue());
    }
}

Чтобы добавить эту возможность, мы создадим AuthorService и добавим @ContinuousQuery с соответствующим запросом:

@ClientCacheApplication(subscriptionEnabled = true)
// existing annotations
public class ClientCacheApp {
    // ...
}

Чтобы использовать непрерывные запросы, мы включим подписки между серверами и клиентами:

~ ~~ Следовательно, наше приложение будет получать автоматическое уведомление в методе процесса всякий раз, когда мы изменяем объект Author с идентификатором, равным 1.

7. Дополнительные аннотации

Давайте рассмотрим несколько удобных аннотаций, дополнительно доступных в Spring Data Библиотека Геода.

7.1. @PeerCacheApplication

До сих пор мы рассматривали приложение Spring Boot в качестве клиента кэша Apache Geode. Иногда нам может потребоваться, чтобы наше приложение было приложением однорангового кэша Apache Geode.

Затем мы должны аннотировать основной класс с помощью @PeerCacheApplication вместо @CacheClientApplication.

Кроме того, @PeerCacheApplication автоматически создаст экземпляр встроенного однорангового кэша для подключения.

7.2. @CacheServerApplication

Точно так же, чтобы наше приложение Spring Boot было и одноранговым членом, и сервером, мы можем аннотировать основной класс с помощью @CacheServerApplication.

7.3. @EnableHttpService

Мы можем включить встроенный HTTP-сервер Apache Geode как для @PeerCacheApplication, так и для @CacheServerApplication.

Для этого нам нужно аннотировать основной класс с помощью @EnableHttpService. По умолчанию служба HTTP запускается на порту 7070.

7.4. @EnableLogging

Мы можем включить ведение журнала, просто добавив @EnableLogging к основному классу. В то же время мы можем использовать атрибуты logLevel и logFile для установки соответствующих свойств.

7.5. @EnablePdx

Кроме того, мы можем включить технику сериализации PDX Apache Geode для всех наших доменов, просто добавив @EnablePdx в основной класс.

7.6. @EnableSsl и @EnableSecurity

Мы можем использовать @EnableSsl для включения TCP/IP-сокета Apache Geode SSL. Точно так же @EnableSecurity можно использовать для включения безопасности Apache Geode для аутентификации и авторизации.

8. Заключение

В этом руководстве мы изучили данные Spring для Apache Geode.

Для начала мы создали приложение Spring Boot, которое будет служить клиентским приложением кэша Apache Geode.

В то же время мы рассмотрели несколько удобных аннотаций, предоставляемых Spring Data Geode, для настройки и включения функций Apache Geode.

Наконец, мы изучили несколько дополнительных аннотаций, таких как @PeerCacheApplication и @CacheServerApplication, чтобы изменить приложение на одноранговый узел или сервер в конфигурации кластера.