Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/berndruecker/flowing-retail
Sample application demonstrating an order fulfillment system decomposed into multiple independant components (e.g. microservices). Showing concrete implementation alternatives using e.g. Java, Spring Boot, Apache Kafka, Camunda, Zeebe, ...
https://github.com/berndruecker/flowing-retail
Last synced: 2 days ago
JSON representation
Sample application demonstrating an order fulfillment system decomposed into multiple independant components (e.g. microservices). Showing concrete implementation alternatives using e.g. Java, Spring Boot, Apache Kafka, Camunda, Zeebe, ...
- Host: GitHub
- URL: https://github.com/berndruecker/flowing-retail
- Owner: berndruecker
- License: apache-2.0
- Created: 2017-09-13T11:41:51.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-01T21:26:31.000Z (6 months ago)
- Last Synced: 2025-01-16T19:15:47.270Z (9 days ago)
- Language: Java
- Homepage:
- Size: 37.4 MB
- Stars: 1,314
- Watchers: 112
- Forks: 470
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - berndruecker/flowing-retail - Sample application demonstrating an order fulfillment system decomposed into multiple independant components (e.g. microservices). Showing concrete implementation alternatives using e.g. Java, Spring Boot, Apache Kafka, Camunda, Zeebe, ... (Java)
README
# Flowing Retail
This sample application demonstrates a simple order fulfillment system, decomposed into multiple independent components (like _microservices_).
The repository contains code for multiple implementation alternatives to allow a broad audience to understand the code and to compare alternatives. The [table below](#alternatives) lists these alternatives.
The example respects learnings from **Domain Driven Design (DDD)**, Event Driven Architecture (EDA) and **Microservices (µS)** and is designed to give you hands-on access to these topics.
**Note:** The code was written in order to be explained. Hence, I favored simplified code or copy & paste over production-ready code with generic solutions. **Don't consider the coding style best practice! It is purpose-written to be easily explainable code**.
You can find more information on the concepts in the [Practical Process Automation](https://processautomationbook.com/) book with O'Reilly.
Flowing retail simulates a very easy order fulfillment system:
![Events and Commands](docs/workflow-in-service.png)
## Architecture and implementation alternatives
The most fundamental choice is to select the **communication mechanism**:
* **[Apache Kafka](kafka/)** as event bus (could be easily changed to messaging, e.g. RabbitMQ): [](docs/architecture.png)
* **[REST](rest/)** communication between Services.
* This example also shows how to do **stateful resilience patterns** like **stateful retries** leveraging a workflow engine.
* **[Zeebe](zeebe/)** broker doing work distribution.After the communication mechanism, the next choice is the **workflow engine**:
* **Camunda 8 (aka Zeebe)**
and the **programming language**:
* **Java**
## Storyline
Flowing retail simulates a very easy order fulfillment system. The business logic is separated into the services shown above (shown as a [context map](https://www.infoq.com/articles/ddd-contextmapping)).
### Long running services and orchestration
Some services are **long running** in nature - for example: the payment service asks customers to update expired credit cards. A workflow engine is used to persist and control these long running interactions.
### Workflows live within service boundaries
Note that the state machine (_or workflow engine in this case_) is a library used **within** one service. If different services need a workflow engine they can run whatever engine they want. This way it is an autonomous team decision if they want to use a framework, and which one:
![Events and Commands](docs/workflow-in-service.png)
## Links and background reading
* [Practical Process Automation](https://processautomationbook.com/) book
* Introduction blog post: https://blog.bernd-ruecker.com/flowing-retail-demonstrating-aspects-of-microservices-events-and-their-flow-with-concrete-source-7f3abdd40e53
* InfoQ-Writeup "Events, Flows and Long-Running Services: A Modern Approach to Workflow Automation": https://www.infoq.com/articles/events-workflow-automation