2017-02-28 6 views
2

Wir verwenden ActiveMQ und haben ein Netzwerk von Brokern definiert (2 in unserem Test-Setup). Wir haben die Makler konfiguriert AMQP-Verbindungen zu akzeptieren, und wir haben „updateClusterClients“ aktivieren und „rebalanceClusterClients“ wie folgt:Load Balancing im ActiveMQ-Netzwerk von Brokern

<transportConnector name="amqp" uri="amqp+ssl://0.0.0.0:5673?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;transport.transformer=jms" updateClusterClients="true" rebalanceClusterClients="true"/> 

Darüber hinaus haben wir bauen unsere Kunden Qpid JMS verwenden. Die Clients wurden mit einer Failover-URL konfiguriert.

Die Clients können problemlos miteinander kommunizieren. Auch wenn ich einen der beiden Broker stoppe, wechseln sie zum verbleibenden Broker.

Wenn ich jedoch den Broker neu starte, hatte ich erwartet, dass einige der Clients zum neuen Broker wechseln. Leider sehe ich tatsächlich, dass sie alle mit demselben Broker verbunden bleiben.

Was könnte der Grund sein, dass sie sich nicht selbst ausbalancieren? Außerdem möchte ich, dass die Clients sich über die beiden Broker verteilen, wenn sie sich anfänglich verbinden. Gibt es einen Weg, wie ich das erreichen kann?

Antwort

1

Der ActiveMQ-Broker versucht nicht, die AMQP-Clients im Broker-Netzwerk neu zu verteilen. Es könnte einen Weg geben, es zu erreichen, aber es macht einige Annahmen über die Natur jedes AMQP-Clients, der verbunden ist, wie die Tatsache, dass sie alle Verbindungsweiterleitungen unterstützen, die nicht alle von ihnen tun.

Bis ein besserer Mechanismus definiert ist, so dass ein Client eine Verbindung herstellen kann und ankündigt, dass er umgeleitet werden kann, denke ich nicht, dass ActiveMQ Verbindungen zwangsweise auf AMQP-Clients löscht, um sie neu zu verteilen. Der Broker kann OpenWire-Clients neu ausgleichen, da er weiß, dass ein mit dem Failover-Transport verbundener OpenWire-Client den Befehl Connection Control anfordert, der den Client zum Verlassen auffordert, wobei ein Client, der keine Verbindung mit Failover herstellt, dies ignoriert Befehl.

+0

Ich hatte Angst, dass das die Ursache sein würde. Alle Beispiele sind mit Openwire, aber nirgendwo wird explizit gesagt, dass dies nur mit Openwire funktioniert, also habe ich insgeheim gehofft, dass ich etwas falsch mache. Nun, zurück zum Zeichenbrett ist es. – Pieter

+0

Es gibt Leute, die an solchen Dingen arbeiten, also ist die Hoffnung nicht verloren. –

+0

Wir werden wahrscheinlich nur auf Openwire umsteigen. – Pieter