Skip to content

Commit 586e561

Browse files
committed
chore: Add documentation on message queues.
1 parent 9361cd9 commit 586e561

File tree

1 file changed

+110
-0
lines changed
  • documentation/06-integration/01-message-queues

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Message-Queues und Integrationsmuster
2+
3+
- Message-Queues
4+
- Asynchrone Zustellung von Nachrichten
5+
- Entkopplung von Sender und Empfänger
6+
- Zeit
7+
- Bekanntheit
8+
- Erreichbarkeit
9+
-
10+
- Fire-and-forget
11+
- Vorteile
12+
- Robustheit
13+
- Fehlertoleranz
14+
- Skalierbarkeit
15+
- Verlässlichkeit
16+
- Herausforderungen
17+
- Fehler
18+
- Reihenfolgerichtigkeit
19+
- Nachvollziehbarkeit
20+
- CAP-Theorem
21+
- Consistency, Availability, Partition Tolerance
22+
23+
```
24+
Publisher -> Message -> MQ
25+
26+
MQ -> Message -> Consumer
27+
```
28+
29+
- Push vs Pull
30+
- Push (zB RabbitMQ): MQ sendet Nachrichten an Consumer
31+
- Pull (zB Kafka): Consumer holen Nachrichten bei der MQ ab
32+
- At least once, at most once, exactly once
33+
- Consumer sendet ACK (verbunden mit Timeout) oder NACK
34+
- At least once: Nachricht erst verarbeitet, dann bestätigt
35+
- At most once: Nachricht erst bestätigt, dann verarbeitet
36+
- Exactly once: Unmöglich
37+
- Deduplizieren von Nachrichten
38+
- Durch Duplikatserkennung
39+
- Idempotente Nachrichten
40+
- Dead-Letter-Queues
41+
- Fangen Nachrichten auf, die nicht zugestellt werden können
42+
43+
```
44+
# SEDA (Staged Event-Driven Architecture)
45+
46+
Video-Upload -> MQ -> SD -> MQ -> HD -> MQ -> 4K -> Publish
47+
```
48+
49+
- Integrationsmuster
50+
- Pipes and Filters
51+
```
52+
--|--|--|--
53+
```
54+
- Request / Response
55+
```
56+
A ---> B
57+
A <--- B
58+
```
59+
- Publish / Subscribe
60+
```
61+
B1
62+
A ---> B2
63+
B3
64+
```
65+
66+
- An welches B wird die Nachricht zugestellt?
67+
- Routing-Strategien
68+
- Fanout
69+
- Round-Robin
70+
- Topic-basiertes Routing (statisch, per Topic-Key)
71+
- Dynamisches Routing
72+
- "Modulo"-Verteilung
73+
- Consistent Hashing
74+
75+
```
76+
M = Message
77+
C = Consumer
78+
Farbe = Topic-/Routing-Key
79+
80+
M1(rot) -> hash(rot) -> 7fba03e4
81+
M2(blau) -> hash(blau) -> 6a4f120a
82+
M3(rot) -> hash(rot) -> 7fba03e4
83+
M4(grün) -> hash(grün) -> bad5fe74
84+
M5(blau) -> hash(blau) -> 6a4f120a
85+
86+
C1(127.0.0.1:3000) -> hash(127.0.0.1:3000) -> 2a9fb47a
87+
C2(127.0.0.1:4000) -> hash(127.0.0.1:4000) -> 6ad14b7f
88+
C3(127.0.0.1:5000) -> hash(127.0.0.1:5000) -> a7bdfa82
89+
90+
00000000
91+
|
92+
__---__ ___ 2a9fb47a (C1)
93+
/ \/
94+
/ \
95+
| |
96+
\ /
97+
a7bdfa82 ___/\__ __/\___ 6ad14b7f (C2)
98+
(C3) --- | Zuständig: 6ad14b7f - a7bdfa81
99+
|
100+
7fba03e4 (rot)
101+
102+
=> rote Nachrichten werden von C2 verarbeitet
103+
blaue Nachrichten werden von C1 verarbeitet
104+
grüne Nachrichten werden von C3 verarbeitet
105+
```
106+
107+
- Bücher
108+
- Enterprise Integration Patterns: https://www.amazon.de/dp/0321200683
109+
- Understanding Distributed Systems: https://www.amazon.de/dp/1838430210
110+
- Designing Data-Intensive Applications: https://www.amazon.de/dp/1449373321

0 commit comments

Comments
 (0)