Статьи

Демонстрация Spring-сессии с использованием docker-compose

Ранее я писал о захватывающем новом проекте под названием Spring-session, который обеспечивает чистый способ вывода пользовательских сеансов для веб-приложений на основе Java.

Мне удалось получить хорошую демонстрационную установку для весенней сессии с использованием docker-compose, которая демонстрирует сильные стороны этого проекта, и я хотел написать об этом здесь. Короче говоря, это настройка, которую запускает docker-compose:

AppTopology

Два экземпляра приложения, использующего Spring-сеанс, запускаются, эти экземпляры используют один и тот же контейнер redis для хранения состояния сеанса и, в свою очередь, запускаются сервером nginx .

Все, что нужно сделать, чтобы поднять эту топологию, это:

  • клон моего репо доступен здесь
  • установить docker-compose
  • создать приложение – «mvn package -DskipTests» – пропустить тесты, так как тесты зависят от локального сервера redis, который может быть или не быть доступным
  • запустить «docker-compose up» в клонированной папке

То есть, если все было настроено чисто, nginx должен быть доступен по адресу http: // docker-ip url – в моем mac это обычно http://192.168.59.103

Детали и демонстрация:

Docker-compose – это инструмент, позволяющий собрать набор Docker- контейнеров в единый стек. Стек может быть определен декларативно, и здесь используется пример стека:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
nginx:
  image: nginx
  volumes:
    - nginx:/etc/nginx:ro
  links:
    - shop1
    - shop2
  ports:
   - "80:80"
 
shop1:
  build: .
  hostname: shop1
  links:
    - redis
  ports:
    - "8081:8080"
 
shop2:
  build: .
  hostname: shop2
  links:
    - redis
  ports:
    - "8082:8080"
 
redis:
  image: redis
  hostname: redis
  ports:
    - "6379:6379"

Это приложение само использует пользовательский сеанс для поддержания состояния «корзины покупок», поскольку это приложение настроено на использование весеннего сеанса, и сеанс будет поддерживаться в базе данных redis. За nginx есть два экземпляра приложения, и один из серверов в конечном итоге получит запрос, но внешнее состояние сеанса будет продолжать работать безотказно независимо от того, обрабатывает ли экземпляр приложения запрос.

Ниже приведен вид корзины покупок:

cart1

Идентификатор сеанса и детали экземпляра, обрабатывающего запрос, напечатаны внизу страницы.

Как видно на следующем снимке экрана, даже если другой экземпляр обрабатывает запрос, состояние сеанса продолжает поддерживаться без ошибок.

cart2

Ссылка: Весенняя сессия демонстрации с использованием docker-compose от нашего партнера JCG Биджу Кунджуммен в блоге all and sundry.