https://github.com/hifly81/bank-account-axon
Example of an application that manages operations on a bank account using Axon framework - CQRS - Event Sourcing - Saga
https://github.com/hifly81/bank-account-axon
axon axon-framework axon-test axonframework bank-account cqrs event-driven event-sourcing kafka kafka-producer kafka-streams saga saga-pattern sagas
Last synced: 5 days ago
JSON representation
Example of an application that manages operations on a bank account using Axon framework - CQRS - Event Sourcing - Saga
- Host: GitHub
- URL: https://github.com/hifly81/bank-account-axon
- Owner: hifly81
- Created: 2017-10-27T13:10:28.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-09-22T13:42:30.000Z (about 3 years ago)
- Last Synced: 2025-02-28T13:39:22.634Z (8 months ago)
- Topics: axon, axon-framework, axon-test, axonframework, bank-account, cqrs, event-driven, event-sourcing, kafka, kafka-producer, kafka-streams, saga, saga-pattern, sagas
- Language: Java
- Homepage:
- Size: 49.8 KB
- Stars: 15
- Watchers: 2
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Bank Account - Axon
Example of an application that manages a bank account.
This an example of an event-driven application, implementing patterns as event sourcing, cqrs, saga.
Events sent to the event bus and to the event bus are persisted to an Apache Kafka topic called "axon-test"..
Simple bank accounts commands/events are sent using Axon Framework; the events provided are:
- create account
- close account
- deposit
- withdrawal
Events are aggregated using the AccountAggregate class.
When a bank account is going to be closed, this is managed using a saga; an implementation of a saga pattern is realized using the CloseAccountSaga class.
The close account event is sent by a simulated external service.
## Prerequisites
Make sure you have an Apache Kafka broker running on localhost:9092 and a topic called "axon-test"
## Compile and execute test
```bash
mvn clean install
```
## Run a sample deposit/withdrawal simulation
```bash
mvn clean install && mvn exec:java -Dexec.mainClass="org.hifly.axon.bank.account.BankAccountApp"
```
```bash
2022-09-22 15:22:11 INFO AccountEventHandler - account created A1, customer kermit the frog
2022-09-22 15:22:11 INFO AccountEventHandler - account created A2, customer john the law
2022-09-22 15:22:16 INFO AccountEventHandler - account A1, deposit 4320.46
2022-09-22 15:22:16 INFO AccountEventHandler - account A2, deposit 976.57
2022-09-22 15:22:21 INFO AccountEventHandler - account A1, withdrawal 9816.56 denied!!! - current balance 4320.46
2022-09-22 15:22:21 INFO AccountEventHandler - account A2, withdrawal 1370.19 denied!!! - current balance 976.57
2022-09-22 15:22:23 INFO QueryController - Account A1, customer kermit the frog, balance 4320.46
2022-09-22 15:22:23 INFO QueryController - Account A2, customer john the law, balance 976.57
```
## Run a close account simulation
Open a new terminal session (don't stop the simulation main program) and run:
```bash
mvn clean install && mvn exec:java -Dexec.mainClass="org.hifly.axon.bank.account.CloseAccountApp"
```
This will log in simulation main program:
```bash
2022-09-22 15:40:07 INFO CloseAccountSaga - Received closed account event...
2022-09-22 15:40:07 INFO CloseAccountSaga - account removed A1, customer kermit the frog
```