|
|
|
|
werden bei Neustart des Servers wieder angelegt, falls durable Attribut gesetzt
Message mit persistent delivery mode wird auf Platte gespeichert (persistency log) und übersteht Ausfall, wenn die zugehörige Queue und Exchange durable sind
etwa Faktor 10 weniger Durchsatz bei persistenten Nachrichten. Ausserdem Probleme bei Clustern
Hard drive corruption, buggy behavior by a consumer, or other extreme events can trash/black-hole persistent messages. It’s ultimately up to you to ensure your messages arrive where they need to go, and persistent messaging is a great tool to help you get there.
RabbitMQ in Action
"The simplest thing that does something"
Producer erzeugt Nachrichten, diese werden direkt an eine Queue geliefert, ein Consumer liest Nachrichten aus
Eine Connection ist die TCP-verbindung zum RabbitMQ-Server (factory.setHost(...)).
Eine Connection kann mehrere Channels enthalten. Ein Channel stellt die Verbindung eines Threads zum RabbitMQ-Server dar. Würde jeder Thread eine eigene TCP-Verbindung aufmachen, würde dies unter Umständen eine erhebliche Last für den Server bedeuten (bei sagen wir mal 1000 Threads ....)
Die Queue wird (nur) dann erzeugt, wenn sie noch nicht existiert.
name: Der (eindeutige) Name der Queue
durable: queue wird bei Neustart des Servers wieder angelegt
exclusive: queue wird bei disconnect des erzeugenden Clients gelöscht
auto_delete: queue wird gelöscht, wenn kein Client mehr connected ist
arguments: zusätzliche Argumente (null --> keine Argumente)
Nachricht verschicken, der Body ist ein byte[]
exchange: Name der exchange, "" wählt die default exchange
routing_key: Bei Verwendung der default-Exchange der Name der Queue
properties: Properties der Nachricht (z.B. routing keys)
body: byte[] das die Nachricht enthält
Callback-Funktion wird aufgerufen, sobald Nachricht eintrifft. Vereinfachung: QueueingConsumer stellt Callback zur Verfügung und kann über nextDelivery() ausgewertet werden.
Der Client holt Nachrichten explizit ab. Versand und Empfang können so zeitlich entkoppelt werden.
Sinnvoll etwa bei Worker-Threads.
Jeder Client schickt Nachricht an die gleiche Fanout-Exchange
Jeder Client erzeugt und bindet eine Queue an diese Exchange, liest alle Nachrichten von dieser Queue und gibt sie aus.
Wie verhindert man, dass die selber gesendete Nachricht ebenfalls ausgegegeben wird ?
Will man das überhaupt ?
|
Im Beispiel Steuerung durch EventMachine, normalerweise Steuerung durch Applikation. (Ansonsten besser Realisierung durch Callback)
/
#