Skip to content

Spring Boot CQRS Example (Docker, Apache Kafka, Zookeeper, MYSQL, MongoDB)

Notifications You must be signed in to change notification settings

Rapter1990/cqrs-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Boot CQRS Example (Docker, Apache Kafka, Zookeeper, MYSQL, MongoDB)

Main Information

📖 Information

  • CQRS (Command Query Responsibility Segregation) is an architectural pattern that separates a system into two parts: one for updating data (commands) and another for reading data (queries).
  • CQRS is implemented in this project with running on Docker and it provides the necessary components to build an event-driven handling with Apache Kafka

Explore Rest APIs

Method Url Description Valid Request Body Valid Request Params Valid Request Params and Body No Valid Request Params and Body
POST /api/v1/openBankAccount Open a Bank Account Info
PUT /api/v1/depositFunds/{id} Deposit Fund to the Account Info
PUT /api/v1/withdrawFunds/{id} Withdraw Fund from Account Info
DELETE /api/v1/closeBankAccount/{id} Close Account Info
GET /api/v1/bankAccountLookup/ Get All Accounts Info
GET /api/v1/bankAccountLookup/{id} Get Account By Id Info
GET /api/v1/bankAccountLookup/byHolder/{account_holder} Get Account By Holder Info
GET /api/v1/bankAccountLookup/withBalance/GREATER_THAN/{value} Get Account By Balance Greather Then Value Info
GET /api/v1/bankAccountLookup/withBalance/LESS_THAN/{value} Get Account By Balance Less Then Value Info
GET /api/v1/restoreReadDb Restore Database By Read Info

Used Dependencies

  • Core
    • Spring
      • Spring Boot
      • Spring Data
        • Spring Data JPA
  • Database
    • Mysql
    • Mongodb
  • Kafka
  • Lombok
  • Docker

Valid Request Body

    http://localhost:5000/api/v1/openBankAccount
    
    {
        "accountHolder" : "Account Holder 1",
        "accountType" : "SAVINGS",
        "openingBalance" : 50.0
    }
    

Valid Request Params

    http://localhost:5000/api/v1/closeBankAccount/{id}
    
    http://localhost:5001/api/v1/bankAccountLookup/byId/{id}
    
    http://localhost:5001/api/v1/bankAccountLookup/byHolder/{account_holder}
    
    http://localhost:5001/api/v1/bankAccountLookup/withBalance/GREATER_THAN/{value}
    
    http://localhost:5001/api/v1/bankAccountLookup/withBalance/LESS_THAN/{value}
    

Valid Request Params and Body

    http://localhost:5000/api/v1/depositFunds/{id}
    
    {
        "amount" : 150.0
    }
    http://localhost:5000/api/v1/withdrawFunds/{id}
    
    {
        "amount" : 50.0
    }

No Valid Request Params and Body

    http://localhost:5001/api/v1/bankAccountLookup/
    
    http:localhost:5000/api/v1/restoreReadDb
    

🔨 Run the App

There are 2 ways to run the app.

Maven

  1. Install mysql in your computer
  2. Install mongodb in your computer
  3. Run only Zookeeper and Apache Kafka from docker-compose.yml file
  4. Download your project from this link https://github.com/Rapter1990/cqrs-example
  5. Go to the project's home directory : cd cqrs-example
  6. Go to the bank-account : cd bank-account
  7. Create a jar file under bank-account directory though this command mvn clean install
  8. Run the project though this command mvn spring-boot:run
  9. Send any request of collection under postman collections folder through Postman
  10. Show data from both mongodb by following all these commands shown below
    -> Open Mongodb Comprass
    -> Create a new connection (mongodb://localhost:27017)
    -> Show data from eventStore collection of bankAccount database
  1. Show data from both mongodb by following all these commands shown below
    -> Open Mysql Workbench
    -> Use default connection
    -> Show data from bank_account table of bankAccount database

Docker Compose

  1. Download your project from this link https://github.com/Rapter1990/cqrs-example
  2. Go to the project's home directory : cd cqrs-example
  3. Go to the bank-account directory : cd bank-account
  4. Run docker-compose though this command docker-compose up --build
  5. Send any request of collection under postman collections folder through Postman
  6. Show data from both mongodb by following all these commands shown below
    -> docker exec -it mongo-container bash
    -> mongosh
    -> show dbs
    -> use bankAccount
    -> show collections
    -> db.eventStore.find({})
  1. Show data from both mysql by following all these commands shown below
    -> docker exec -it mysql-database mysql -uroot -p
    -> Enter password: password defined in database
    -> USE bankAccount
    -> show tables;
    -> SELECT * FROM bank_account;

Screenshots

Click here to show the screenshots of project

Figure 1

Figure 2

Figure 3

Figure 4

Figure 5

Figure 6

Figure 7

Figure 8

Figure 9

Figure 10