Was ist der Unterschied zwischen Publisher-Subscriber- und Reactor-Mustern?

11

Publish-Subscribe- und Reactor- Muster sehen mir sehr ähnlich. Wie unterscheiden sie sich?

In beiden Mustern wird eine Nachricht indirekt an Teilnehmer weitergeleitet (Zuhörer im Reaktormuster).

Ich bin der Meinung, dass das Beobachtermuster auch zwei anderen Mustern sehr ähnlich ist.

Was sind die Hauptunterschiede zwischen diesen Mustern?

Mohsen
quelle

Antworten:

12

Wie ich dem Link entnehmen kann, ist das PubSub-Muster kein OOP-Muster, sondern ein Messaging-Muster , bei dem es sich um ein Netzwerkarchitekturmuster handelt.

Das Reaktormuster hängt mit der Anforderungsbearbeitung von Servern mit einer Single-Threaded- Ereignisschleife zusammen . Auch hier zeigt der Link einige gute Beispiele wie Node.js, Netty, Twisted usw.

Schließlich ist Observer ein OOP-Entwurfsmuster, das eine Art der Interaktion zwischen Objekten im OO-Code beschreibt.

Diese drei Muster stammen also aus verschiedenen Bereichen.

scriptin
quelle
6

Reactor = Single-Threaded-Ereignisschleife, die Anforderungen empfängt und verarbeitet. Diese Anforderungen können stapelweise aus einer Datei über SMTP und / oder HTTP geladen werden. Gleichzeitige verarbeitete Antworten werden nicht sequentiell, sondern bereit geliefert.

Verlage senden. Abonnenten verbrauchen.

Verleger + Abonnenten = Beobachtermuster (Heads First Design Patterns). Beobachter feuern nacheinander und blockieren normalerweise, bis sie fertig sind.

Gerry King
quelle
2

PubSub ist eher mit Messaging Queues (MQs) verwandt. Dies hängt damit zusammen, wie Knoten in einem verteilten System asynchrone Nachrichten empfangen.

Das Reaktormuster hat mehr mit asynchronen Ereignissen zu tun. Beispielsweise verwenden nicht blockierende Sockets das Reaktormuster, um Netzwerkereignisse zu liefern: READ, WRITE, CONNECT, ACCEPT

Sie können CoralReactor überprüfen , um das Reaktormuster besser zu verstehen.

Haftungsausschluss : Ich bin einer der Entwickler von CoralReactor.

rdalmeida
quelle