The systems landscape consists of three systems order management, restaurant management and courier management
Customers use the web application to place food orders at local restaurants. Application(s) coordinates a restaurant/kitchen order preparation, and a network of couriers who deliver the orders.
Event Modeling is a method of describing systems using an example of how information has changed within them over time.
The C4 software architecture model is a simple hierarchical way to think about the static structures of a software system in terms of containers, components and classes (or code).
A System Context
diagram can be a useful starting point for diagramming and documenting a software system, allowing you to step back and look at the big picture.
Managing restaurant menus and other information including location and opening hours. Managing the preparation of orders at a restaurant kitchen.
We zoom in to show the event model of the Restaurant Management System only:
Specification by example (SBE) is a collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements.
Once you understand how your system fits in to the overall IT environment with a System Context diagram, a really useful next step can be to illustrate the high-level technology choices with a Container diagram:
Following on from a Container diagram showing the high-level technology decisions, you can then start to zoom in and decompose each container further:
Name: | Restaurant Management | ||
Description: | Managing restaurant menus and other information including location and opening hours. Managing the preparation of orders at a restaurant kitchen. | ||
Concepts: | Architectural patterns: | Technology: | |
|
|
|
|
Service API | |||
Commands: | Queries: | Events published: | |
gRPC:
|
gRPC:
|
gRPC:
|
|
Domain model: | |||
|
|||
Dependencies: | |||
Invokes | Subscribes to | ||
- | - |
This project is driven using maven.
Requirements
You can download a ZIP file with AxonServer as a standalone JAR. This will also give you the AxonServer CLI and information on how to run and configure the server.
Alternatively, you can run the following command to start AxonServer in a Docker container:
docker run -d --name axonserver -p 8024:8024 -p 8124:8124 axoniq/axonserver
Build & Test
./mvnw clean verify
to additionally run integration testcontainers tests (docker required):
./mvnw clean verify -DskipIntegrationTests=false
Run
./mvnw spring-boot:run
Requirements
- Kubernetes. It is included in the Docker on Mac (and Windows) binary so it installed automatically with it. After a successful installation, you need to explicitly enable Kubernetes support. Click the Docker icon in the status bar, go to “Preferences”, and on the “Kubernetes” tab check “Enable Kubernetes”.
- Kubectl allows you to run commands against Kubernetes clusters. You can use kubectl to deploy applications, inspect and manage cluster resources, and view logs
Build the docker image to local registry:
./mvnw clean verify jib:dockerBuild
Deploy:
kubectl apply -k .k8s/base
Delete:
kubectl delete -k .k8s/base
kubectl delete pvc --all
Continuously deploy with google skaffold
- Skaffold is a command line tool that facilitates continuous development for Kubernetes applications.
Use skaffold dev
to build and deploy your app every time your code changes:
$ skaffold dev
or activate observability
profile, to enable metrics and tracing with Prometheus, Grafana and Jaeger:
$ skaffold dev -p observability
Deploy once
Use skaffold run
to build and deploy your app once, similar to a CI/CD pipeline:
$ skaffold run
or activate observability
profile, to enable metrics and tracing with Prometheus, Grafana and Jaeger:
$ skaffold run -p observability
- https://microservices.io/book
- https://www.manning.com/books/specification-by-example
- https://teamtopologies.com/book
- https://www.oreilly.com/library/view/domain-driven-design-distilled/9780134434964/
- https://ddd-crew.github.io/
- https://miro.com/app/board/o9J_kqtuB6A=/
- https://eventmodeling.org/
- https://docs.axoniq.io/reference-guide/
- https://structurizr.com/
- https://github.com/archifacts/archifacts
Created with ❤️ by Fraktalio