Released the component for part 1 of the blog series part-1
authorKai Moritz <kai@juplo.de>
Sun, 16 May 2021 13:26:39 +0000 (15:26 +0200)
committerKai Moritz <kai@juplo.de>
Sun, 16 May 2021 13:26:39 +0000 (15:26 +0200)
* 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 [new file with mode: 0644]
README.sh
docker-compose.yml
pom.xml

diff --git a/README.md b/README.md
new file mode 100644 (file)
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
index ab544c9..f02c9fc 100755 (executable)
--- 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
index ae92619..1b09b5f 100644 (file)
@@ -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 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
    </parent>
    <groupId>de.juplo.boot.data</groupId>
    <artifactId>data-jdbc</artifactId>
-   <version>0.0.1-SNAPSHOT</version>
+   <version>polling-outbox-1</version>
    <name>Data JDBC</name>
    <description>Simple web-app example for spring-boot-data-jdbc</description>
 
@@ -71,7 +71,7 @@
          <configuration>
            <images>
              <image>
-               <name>juplo/%a:latest</name>
+               <name>juplo/%a:%v</name>
              </image>
            </images>
          </configuration>