Das Publish-Subscribe-Muster bedeutet, dass eine von einem Produzenten gesendete Nachricht von mehreren Verbrauchern empfangen wird. Da eine Nachricht von mehreren Verbrauchern konsumiert und verarbeitet wird, wird es auch als Broadcast-Muster oder One-to-Many-Muster bezeichnet.
Hinweis: Da RabbitMQ das Publish-Subscribe-Muster mithilfe des Fanout-Austauschtyps implementiert, wird es auch als Fanout-Muster bezeichnet.
Architekturdiagramm
Erklärung:
- P steht für den Produzenten, C1 und C2 für Verbraucher, Rot steht für Warteschlangen und X steht für den Austausch.
- Der Austausch ist dafür verantwortlich, Nachrichten an alle an den Austausch gebundenen Warteschlangen weiterzuleiten.
- Es können mehrere Warteschlangen definiert werden, die alle an denselben Austausch gebunden sind.
- Jede Warteschlange kann einen oder mehrere Verbraucher haben.
Tipp: In derselben Warteschlange kann eine Nachricht nur von einem Verbraucher verarbeitet werden. Der Grund, warum das Fanout-Muster eine Nachrichtenübertragung erreichen kann, liegt letztendlich in mehreren Nachrichtenwarteschlangen.
Anwendungsfälle
Das Publish-Subscribe-Muster ist ein häufig verwendetes One-to-Many-Verbrauchsmuster. Zum Beispiel wird nach einer E-Commerce-Bestellung eine Bestellnachricht generiert. Das Lagermodul abonniert die Bestellnachricht, um Sendungen zu bearbeiten, das Benachrichtigungsmodul abonniert die Bestellnachricht, um SMS zu senden, das Punktemodul abonniert die Bestellnachricht, um Punkte zu bearbeiten, usw. Durch das Abonnieren von Nachrichten nach Bedarf wird eine Geschäftserweiterung erreicht, und es handelt sich um ein Low-Coupling-Designmuster.