From 80bd56323a5d6d4f280187a5ef52ad47c3098918 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sun, 16 May 2021 15:26:39 +0200 Subject: [PATCH] Released the component for part 1 of the blog series * Introduced the fixed version polling-outbox-1 for this version of the implementation. * Added a README for GitHub. * Shortend the execution-time of the demonstration-script. --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ README.sh | 13 ++++++++----- docker-compose.yml | 2 +- pom.xml | 4 ++-- 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2748ed9 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Implementation of the Outbox-Pattern for Apache Kafka + +This Repository holds the source code for +[a blog-series that explains a technically complete implementation of the outbox-pattern for Apache Kafka](https://juplo.de/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table/). + +Execute [README.sh](README.sh) in a shell to demonstrate the example: + + ./README.sh + +The script will... + +* compile the component, +* package it as Docker-Images, +* start up the component and a PostreSQL as containers in a [Compose-Setup](docker-compose.yml), +* execute example-queries (CREATE / DELETE) against the API of [the example-project](https://juplo.de/implementing-the-outbox-pattern-with-kafka-part-0-the-example/) and +* tail the logs of the containers `jdbc` to show what is going on. + +You can verify the expected outcome of the demonstration by running a command like the following: + + $ docker-compose exec postgres psql -Uoutbox -c'SELECT * FROM outbox;' -Ppager=0 outbox | grep peter + 1 | peter1 | "CREATED" | 2021-05-16 13:20:36.849 + 10 | peter2 | "CREATED" | 2021-05-16 13:20:42.141 + 19 | peter3 | "CREATED" | 2021-05-16 13:20:47.136 + 28 | peter4 | "CREATED" | 2021-05-16 13:20:52.087 + 37 | peter5 | "CREATED" | 2021-05-16 13:20:57.512 + 46 | peter6 | "CREATED" | 2021-05-16 13:21:02.493 + 55 | peter7 | "CREATED" | 2021-05-16 13:21:07.503 + $ + +The example-output shows, that the CREATE-event for users with "peter" in their username are only stored exactly once in the outbox-table, although the script issues several requests for each of these users. + +Be aware, that the outcome of the script will be different, if you run it several times. +In order to reproduce the same behaviour, you have to shut down the Compose-Setup before rerunning the script: + + docker-compose down -v + ./README.sh + +To clean up all created artifacts one can run: + + ./README.sh cleanup diff --git a/README.sh b/README.sh index ab544c9..f02c9fc 100755 --- a/README.sh +++ b/README.sh @@ -4,19 +4,19 @@ if [ "$1" = "cleanup" ] then docker-compose down -v mvn clean - docker image rm juplo/data-jdbc:latest + docker image rm juplo/data-jdbc:polling-outbox-1 exit fi if [[ - $(docker image ls -q juplo/data-jdbc:latest) == "" || + $(docker image ls -q juplo/data-jdbc:polling-outbox-1) == "" || "$1" = "build" ]] then - mvn package || exit + mvn install || exit else echo "Using image existing images:" - docker image ls juplo/data-jdbc:latest + docker image ls juplo/data-jdbc:polling-outbox-1 fi docker-compose up -d jdbc @@ -30,14 +30,17 @@ done docker-compose logs --tail=0 -f jdbc & -for i in `seq 1 20`; +for i in `seq 1 7`; do echo peter$i | http :8080/users echo uwe$i | http :8080/users echo peter$i | http :8080/users echo simone$i | http :8080/users + echo beate$i | http :8080/users http DELETE :8080/users/franz$i http DELETE :8080/users/simone$i + echo beate$i | http :8080/users + http DELETE :8080/users/beate$i echo franz$i | http :8080/users echo franz$i | http :8080/users echo beate$i | http :8080/users diff --git a/docker-compose.yml b/docker-compose.yml index ae92619..1b09b5f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: jdbc: - image: juplo/data-jdbc:latest + image: juplo/data-jdbc:polling-outbox-1 ports: - 8080:8080 environment: diff --git a/pom.xml b/pom.xml index f0318e8..858262b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ de.juplo.boot.data data-jdbc - 0.0.1-SNAPSHOT + polling-outbox-1 Data JDBC Simple web-app example for spring-boot-data-jdbc @@ -71,7 +71,7 @@ - juplo/%a:latest + juplo/%a:%v -- 2.20.1