Dieses Projekt ist ein verteiltes Blog-Management-System, das Quarkus und Kafka nutzt, um eine effiziente Kommunikation zwischen Microservices zu ermöglichen. Es besteht aus zwei Haupt-Services, von denen einer mit einer Datenbank verbunden ist.
-
Blog Backend:
- Verwaltung von Blogbeiträgen
- Versendet Validierungsanfragen für Blogeinträge über Kafka an den
text-validation-service
- Speichert validierte bzw. nicht validierte Blogeinträge in der Datenbank
-
Kafka:
- Nutzt zwei Topics zur Kommunikation:
- `validation-requests`: Für Anfragen zur Validierung von Blogeinträgen
- `validation-responses-out`: Für die Übermittlung der Validierungsergebnisse
-
Text Validation Service:
- Empfängt Nachrichten aus
validation-requests
- Überprüft Namen und Beschreibungen von Blogs auf Gültigkeit
- Sendet die Validierungsergebnisse zurück über
validation-responses-out
- Empfängt Nachrichten aus
Das gesamte System kann mit Docker Compose gestartet werden. Eine entsprechende docker-compose.yml
-Datei ist im Projekt enthalten.
git clone git@github.com:myster-blues-woman/blog-backend.git
cd blog-backend
Die Container-Images sind bereits in GHCR gespeichert. Die neuesten Versionen können mit folgendem Befehl heruntergeladen werden:
docker pull ghcr.io/myster-blues-woman/blog-backend:latest
docker pull ghcr.io/myster-blues-woman/text-validation-service:latest
docker-compose up -d
Dadurch werden folgende Dienste gestartet:
- Blog Backend (
blog-backend
) - Text Validation Service (
text-validation-service
) - Kafka (
redpanda
) - PostgreSQL (Datenbank für
blog-backend
)
docker-compose down
Der text-validation-service
stellt sicher, dass Blogeinträge bestimmten Anforderungen entsprechen, bevor sie in der Datenbank gespeichert werden. Folgende Validierungsregeln werden angewendet:
- Falls der Name eines Blogs bestimmte unzulässige Begriffe enthält, wird die Validierung abgelehnt.
- Die Beschreibung wird auf unerlaubte Inhalte oder ungültige Werte geprüft.
Request:
curl -X POST http://localhost:8080/blog \
-H "Content-Type: application/json" \
-d '{
"name": "Mein erster Blog",
"description": "Dies ist ein validierter Blogeintrag."
}'
Request:
curl -X POST http://localhost:8080/blog \
-H "Content-Type: application/json" \
-d '{
"name": "Ungültiger Name",
"description": "Dieser Eintrag wird nicht validiert."
}'
Request:
curl -X POST http://localhost:8080/blog \
-H "Content-Type: application/json" \
-d '{
"name": "Validierter Name",
"description": "Ungültiger Beschreibungstext."
}'
Request:
curl -X GET http://localhost:8080/blog
Request:
curl -X GET http://localhost:8080/blog/validated