2013-06-21 5 views
5

tun, wenn ich die Broker welche angeben, zu verbinden, was ist der Unterschied zwischen AngabeWas bedeutet Transport Failover mit einem einzigen URI In meinem ActiveMQ Client

tcp://host:port 

und

failover:(tcp://host:port) 

Ich habe versucht, Stoppen und Starten des Brokers und in beiden Fällen findet der Client den Broker beim Neustart wieder. Ich habe noch nicht mit Nachrichten im Flow (ich verwende Warteschlangen) oder anderen Netzwerkausfällen experimentiert, um zu sehen, ob es einen Unterschied gibt.

Hoffentlich hat jemand eine definitive Antwort, da die Dokumentation, die ich gefunden habe, ein bisschen vage ist.

Dank

+0

Falls jemand neugierig ist, warum ich frage, wird mein Client wiederholt EOFExceptions, wenn ich den Failover-URI verwende. Unglücklicherweise tut es das nur in einer bestimmten Umgebung, und ich bemühe mich, es zu reproduzieren oder die Ursache zu verstehen, stattdessen versuche ich, die Konsequenzen des Entfernens des Failovers zu verstehen. EOFExceptions könnten eine Zukunftsfrage sein! –

Antwort

2

Failover-Protokoll können Sie auch einige nützliche Verbindungsparameter bereitstellen. Für die Ex:

failover:(tcp://host:port)?jms.useAsyncSend=true&timeout=5000 

Hier timeout=5000 werden sicherstellen anfänglichen Verbindungsversuch retten nach 5 Sekunden, wenn Broker nicht verfügbar oder reagiert nicht ist.

+0

Danke. Beide Antworten sind richtig, also habe ich diejenige ausgewählt, die am nützlichsten war. –

5

Wenn Sie Failover verwenden, dann geht die Client-Bibliothek in eine Reconnect Schleife, wenn Sie lose Verbindung zum Server. Der Netzwerkfehler wird in Ihrer App ausgeblendet. Wenn Sie kein Failover verwenden, wird Ihre App bei Verlust der Verbindung einen JMS-Fehler erhalten, der Ihnen mitteilt, dass Sie die Verbindung verloren haben.

+0

Danke. Das macht sehr viel Sinn. –

1

Failover ist sehr nützlich, um das Problem des Broker- oder Systemausfalls zu lösen und bietet Haltbarkeit.

Failover: (tcp: // host1: port, tcp: // host2: port, tcp: // host3: port) jms.useAsyncSend = true & randomize = false

hier? Wenn Sie randomize = true setzen, werden alle 3 Broker gleichzeitig verwendet und randomize = false bedeutet, dass Sie jeweils einen Broker verwenden und wenn der laufende Broker ausfällt, wählen Sie einen beliebigen Broker aus den Sleeping Brokern aus. Und useAsyncSend = true wird das Messaging-System in asynchroner Weise ausführen, die im Vergleich zu synchron schnell ist.

Verwandte Themen