1 package de.trion.kafka.outbox;
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5 import org.springframework.http.ResponseEntity;
6 import org.springframework.stereotype.Component;
7 import org.springframework.web.context.request.async.DeferredResult;
9 import java.util.HashMap;
11 import java.util.Random;
14 public class OutboxService {
16 private static final Logger LOG = LoggerFactory.getLogger(OutboxService.class);
19 private final Map<String, String> state = new HashMap<>();
20 private final Map<String, DeferredResult> requests = new HashMap<>();
22 private long counter = 1;
25 public OutboxService() {}
28 public String bearbeiteVorgang(String vorgangId, String vbId, String data) {
29 if (vorgangId == null)
30 throw new IllegalArgumentException("vorgangId must not be null!");
32 // Fehler beim Sichern simulieren
33 Random r = new Random();
34 int i = r.nextInt(10);
36 throw new RuntimeException("FEHLER!!!!!!");
38 String result = vorgangId + "|vbId=" + vbId + "|" + counter++ + ", rand=" + i + ": " + data;
40 if (state.containsKey(vorgangId))
41 LOG.info("Bearbeite Vorgang {}: alt={}, neu={}", vorgangId, state.get(vorgangId), data);
43 LOG.info("Bearbeite Vorgang {}: neu={}", vorgangId, data);
45 process(vorgangId, result);
49 public synchronized void process(String vorgangId, DeferredResult result) {
50 String data = state.get(vorgangId);
52 result.setResult(ResponseEntity.ok(data));
55 requests.put(vorgangId, result);
59 private synchronized void process(String vorgangId, String result) {
60 state.put(vorgangId, result);
61 DeferredResult request = requests.get(vorgangId);
63 request.setResult(ResponseEntity.ok(result));