Vorlage spring/rest-producer--json--vorlage---2023-06-signal
authorKai Moritz <kai@juplo.de>
Thu, 15 Jun 2023 20:34:08 +0000 (22:34 +0200)
committerKai Moritz <kai@juplo.de>
Thu, 15 Jun 2023 21:07:15 +0000 (23:07 +0200)
README.sh
src/main/java/de/juplo/kafka/ApplicationConfiguration.java
src/main/java/de/juplo/kafka/RestProducer.java

index 427eca3..696141f 100755 (executable)
--- a/README.sh
+++ b/README.sh
@@ -36,6 +36,4 @@ while ! [[ $(http 0:8080/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Wait
 
 echo -n 3 | http -v :8080/foo;
 
-# tag::kafkacat[]
 kafkacat -b :9092 -t test -o 0 -e -f 'p=%p|o=%o|k=%k|h=%h|v=%s\n'
-# end::kafkacat[]
index 9a11f6e..9d1bfbb 100644 (file)
@@ -5,7 +5,6 @@ import org.apache.kafka.common.serialization.StringSerializer;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.kafka.support.serializer.JsonSerializer;
 
 import java.util.Properties;
 
@@ -40,10 +39,8 @@ public class ApplicationConfiguration
     props.put("linger.ms", properties.getLingerMs());
     props.put("compression.type", properties.getCompressionType());
     props.put("key.serializer", StringSerializer.class.getName());
-    props.put("value.serializer", JsonSerializer.class.getName());
-    props.put(JsonSerializer.TYPE_MAPPINGS,
-        "ADD:" + AddNumberMessage.class.getName() + "," +
-        "CALC:" + CalculateSumMessage.class.getName());
+    // TODO: Der value.serializer soll auf den JsonSerializer umgestellt werden!
+    props.put("value.serializer", StringSerializer.class.getName());
 
     return new KafkaProducer<>(props);
   }
index e68fe66..adf8d95 100644 (file)
@@ -31,13 +31,45 @@ public class RestProducer
       @RequestHeader(name = "X-id", required = false) Long correlationId,
       @RequestBody Integer number)
   {
+    // Der Service verschickt für eine Zahl n immer n+1 Nachrichten.
+    //
+    // TODO:
+    //
+    // Diese Implementierung schickt Strings:
+    // Für n=3 z.B.:
+    // "1"
+    // "2"
+    // "3"
+    // "CALC"
+    //
+    // Nach der Umstellung auf JSON, sollen die JSON-Repräsentation
+    // der Klassen AddNumberMessage und CalcNumberMessage versendet
+    // werden.
+    // Für n=3 z.B.:
+    // ADD:  { "number": 3, "next": 1 }
+    // ADD:  { "number": 3, "next": 2 }
+    // ADD:  { "number": 3, "next": 3 }
+    // CALC: { "number": 3 }
+    // Dabei gibt der String vor dem ":" das Type-Mapping an
+    // das verwendet werden soll.
+
     ResultRecorder result = new ResultRecorder(number+1);
 
     for (int i = 1; i <= number; i++)
     {
-      send(key, new AddNumberMessage(number, i), correlationId, result);
+      // TODO:
+      // Senden Sie
+      // new AddNumberMessage(number, i) <-- Type-Mapping: ADD
+      // anstatt
+      // Integer.valueOf(i)
+      send(key, String.valueOf(i), correlationId, result);
     }
-    send(key, new CalculateSumMessage(number), correlationId, result);
+    // TODO:
+    // Senden Sie
+    // new CalculateSumMessage(number) <-- Type-Mapping: CALC
+    // anstatt
+    // "CALC"
+    send(key, "CALC", correlationId, result);
 
     return result.getDeferredResult();
   }