A fictitious cloud-native e-commerce sample application using micro-services architecture powered by Spring Cloud, Docker, React.JS, MongoDB, Redis and more.
This sample e-commerce application demonstrates how to build an application using microservices architecture paradigm with Polyglot Languages (Java, JavaScript) & Polyglot Persistance software (MongoDB, Redis). This sample application includes following functional microservices & infrastructure microservices. All of these microservices are independently deployable applications and are organized around business capabilities.
###Functional Microservices
- Product Catalog Microservice
- Cart Microservice
Order Management Microservice[TODO]Inventory Microervice[TODO]Pricing Microservice[TODO]
###Infrastructure Microservices
- Global Configuration Microservice
- Service Registration & Discovery Miroservice
API Gateway[TODO]
The application is setup as multi-level project where each microservice is arranged as a sub-module under single parent project. It enables to run each microservice individually.
##Prerequisites
- JDK 8 - Install JDK 1.8 version from, http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- Gradle [Optional] - Download latest version of Gradle from https://gradle.org/gradle-download/ (binary distribution is good enough) and configure your machine with Gradle as specified at, https://docs.gradle.org/current/userguide/installation.html
- Docker Toolbox - Install Docker Toolbox on your machine from, https://www.docker.com/products/docker-toolbox
- Node.js - Install Node.js from, https://nodejs.org/en/download/
- IntelliJ IDEA Community Edition [Optional] - Install IntelliJ IDEA Community Edition from, https://www.jetbrains.com/idea/#chooseYourEdition
##Installation
Clone respository source code by executing following instruction to any folder on your machine,
git clone https://github.com/venkataravuri/e-commerce-microservices-sample.git
cd e-commerce-microservices-sample
###Building Application
Gradle has been used as a build tool to build Spring Boot based Microservices applications. Issue following command on your terminal/console window,
gradlew build
This command might take a while for first time as it needs to download serveral dependency libraries from Maven repository. This command will build & package all microservice applications.
Upon successful building of microservices, you can now build Docker images and run containers Docker host on your machine, Note: Prior to execute below instructions, ensure you have started 'Docker Quickstart Terminal'. If you are new to docker, read more about Docker at, https://docs.docker.com/engine/getstarted/ Excute below commands in sequence on 'Docker Quickstart Terminal',
cd <Replace this with e-commerce-microservices-sample folder path>
docker-compose build --no-cache
Above command may take time for first time, as it needs to download base images. All docker containers are based on light-weight LinuxOS called 'Alpine Linux', which is hardly ~5MB.
Issue following command, to run Docker containers,
docker-compose up
Above command starts all Microsevices Docker containers as specified in 'docker-compose.yml' file. Important Note: Some Microservices may not start properly due to interdependcy on infrastructure Microservices' containers. Unfortunately, docker-compose command will NOT wait till dependent containers started. It will start all containers simultaneously. You may need to re-start failed containers manually. I recommend to use 'Kitematic (Alpha)' console shipped with 'Docker Toolbox' to restart failed containers.
You can bring the docker containers down (when needed) using below command,
docker-compose down --remove-orphans
Frontend application is a Single Page Appliction built using React.JS library. The source code of this application is available under, 'ecommerce-app' folder. Issue following commands in sequence to build & run frontend app,
cd ecommerce-app
npm install
npm run start-dev
Note: 'npm install' command may take a while, as it needs to download all dependent npm modules used by frontend app.
Once above instructions successfully executed, you can view e-commerce application by browsing below URL, http://localhost:3333
##Prodcut Catalog Microservice
Product Catalog Microservice manages e-commerce application's products. This microservice is built as Spring Boot application with MongoDB as persistance store for product information.
Product Catalog REST API supports following opertations,
Method | URI | Description | Parameters | Request JSON | Response JSON |
---|---|---|---|---|---|
GET |
/products/recommendations | List of recommended products | None | [TODO] | |
GET |
/products/{id} | Fetch product information based on id | None | [TODO] | |
PUT |
/products | Adds new product | [TODO] | [TODO] | |
POST |
/products/{id} | Updates existing product | [TODO] | [TODO] |
##Cart Microservice
Cart Microservice provides e-commerce application's shopping cart functionality. This microservice is built as Spring Boot application with Redis as InMemory persistance store for cart information.
Cart REST API supports following opertations,
Method | URI | Description | Parameters | Request JSON | Response JSON |
---|---|---|---|---|---|
GET |
/cart/{id} | Fetches cart by id | None | [TODO] | |
POST |
/cart/{id} | Creates or updates cart | [TODO] | [TODO] |