Scalable Java 11 Spring Boot WebFlux Chat Application to demonstrate use of Reactive Redis Pub/Sub using Reactive WebSocket Handler, without using any external Message Broker like RabbitMQ to sync messages between different instances.
The older non-reactive servlet based spring-redis-websocket application can be found in below links:
Ctrl + Click this button to deploy multiple instances of the spring-redis-websocket load balanced by NGINX:
Install and run Redis locally or on Docker.
To run Redis in Docker:
$ docker run -d -p 6379:6379 -e REDIS_PASSWORD=SuperSecretRedisPassword bitnami/redis:4.0.11-r6
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
Build and run the spring-redis-websocket application:
$ cd spring-redis-websocket
$ mvn clean package
$ mvn spring-boot:run
Build the JAR file:
$ mvn clean package
Build docker image:
$ mvn spring-boot:build-image
Run docker image:
$ docker run -d -p 8080:8080 \
$ rawsanj/spring-redis-websocket
Run multiple instances of spring-redis-websocket locally load balanced via Ngnix connected to redis container in Docker:
$ cd src/main/docker
$ docker-compose up
Or try Play with Docker to quickly setup Docker and run in browser:
- Click Create Instance to quickly setup Docker host.
- Install git by running:
$ apk add git --no-cache
- Clone the repository:
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
- Run multiple instances of spring-redis-websocket:
$ cd spring-redis-websocket/src/main/docker
$ docker-compose up
$ kubectl apply -f src/main/k8s
Or try Play with Kubernetes to quickly setup a K8S cluster:
- Follow the instructions to create Kuberenetes cluster.
- Install git by running:
$ yum install git -y
- Clone the repository:
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
- Run multiple instances of spring-redis-websocket load balanced by native Kubernetes Service. All instances connected to a single Redis pod.
$ cd spring-redis-websocket
$ kubectl apply -f src/main/k8s
spring-redis-websocket uses a number of open source projects:
- Spring Boot - An opinionated framework for building production-ready Spring applications. It favors convention over configuration and is designed to get you up and running as quickly as possible.
- Spring Data Redis - Spring Data Redis provides easy configuration and access to Redis from Spring applications.
- Redis - Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
- Bootstrap - Bootstrap is an open source toolkit for developing with HTML, CSS, and JS. Custom Bootstrap theme - Bootswatch Sketch.
- Docker - Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications.
- NGINX - NGINX is High Performance Load Balancer, Web Server, & Reverse Proxy.
- Kubernetes - Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
Apache License 2.0
Copyright (c) 2020 Sanjay Rawat