Frage

Ich habe mehrere Server, die XML-Dateien aus Python und einige andere Server herzustellen, die diese xmls mit Java verbrauchen. Ich habe erst vor kurzem in JMS sehe und ActiveMQ und beschlossen, mit ihm zu versuchen, die XML-Dateien zu übergeben.

Also habe ich ActiveMQ Daemons auf den Consumer-Servern und dachte ich einige Zyklisierungsmethode implementieren würde auf die die xmls gleichmäßig auf die Verbraucher verteilen produziert.

Python  -----------------------------> ActiveMQ ---> Java
        \                           /
         \                         /
          ---------------------------> ActiveMQ ---> Java
                                 /  /
Python  ----------------------------

Für die Prüfung, lief ich einen Produzenten und einen Verbraucher und sah die Ergebnisse an.

Zu meiner Überraschung der Nachrichten vom Produzenten wurden über all ActiveMQ-Server im Netzwerk verteilt. Da ich nur einen Verbraucher lief es nur die xmls erhalten, die auf dieser Maschine an den ActiveMQ-Daemon bekam, und der Rest der xmls wurde geduldig auf den anderen ActiveMQ Daemons auf anderen Maschinen zu warten.

Python  -----------------------------> ActiveMQ ---> Java (work)
                                          |
                                          |
                                       ActiveMQ (xmls piling up)

EDIT: Das ist nicht das, was tatsächlich passiert ist, tut mir leid. Details siehe unten

Nun, ich mich nicht beschweren, denn das ist, was ich wollte sowieso, aber ich bin ein wenig verwirrt: Was ist der richtige Weg ist, diese many-to-many-Warteschlange zu implementieren, die ich bin nach

Soll ich einrichten ActiveMQ Daemons auf meinem Produzenten Maschinen als auch, die xmls den localhost ActiveMQs senden und die automatische Erkennung vertrauen den xmls für die Verbraucher zu bekommen?

Python ---> ActiveMQ ------------------------------ ActiveMQ ---> Java
                |                                      |
                |                                      |
                |                                -- ActiveMQ ---> Java
                |                               |  
Python ---> ActiveMQ----------------------------

Soll ich bleibe bei meinem ursprünglichen Plan, und Zyklus der Nachrichten über die Verbraucher-Maschinen, nur um sicher zu sein?

Oder gibt es eine API soll ich verwenden, dass diese Details aus meinen Prozessen verbergen?

BTW, sind die Produzenten Prozesse Python mit STOMP und die Verbraucher sind Java mit JMS.

Ich entschuldige mich, wenn Sie Ihre Augen von meiner beschissenen ASCII-Art zu verletzen sind, war ich nicht sicher, ob ich nur mit Worten klar genug zu sein.

EDIT

Offenbar als ich laufe „einen Produzenten und einen Verbraucher“ Ich habe nicht bemerkt, dass die anderen Verbraucher bereits liefen. Sie taten einfach nichts Nützliches mit dem xmls sie verarbeitet. Deshalb habe ich Teilergebnisse sah.

Nach etwas mehr Lesen und Experimentieren ein wenig, ich herausgefunden wie folgt vor:

Standardmäßig wird ActiveMQ auto-discover andere ActiveMQ-Instanzen auf dem lokalen Netzwerk, und erstellen Sie eine Store-and-forward Netzwerk von Maklern . Dies bedeutet, dass der Hersteller den xmls eine ActiveMQ Instanz veröffentlichen kann, und sie werden ihren Weg zum Verbraucher hört auf anderen ActiveMQ Instanzen auf demselben Netzwerk.

Beachten Sie, dass die Dokumentation behauptet, dass die automatische Erkennung nicht für die Produktion Setups empfohlen.

Die akzeptierte Antwort unten noch gilt, though. Der einfachste Weg, ActiveMQ zu verwenden verwendet nur einen oder zwei Server als „Queue-Server“. Dennoch entschied ich mich mit meinem ursprünglichen Plan zu gehen, weil ich denken es wird der Netzwerkverkehr reduzieren (mit einem mittleren Server, müssen xmls hinein gehen und die aus ihm wieder).

War es hilfreich?

Lösung

Itsadok, ich glaube, Sie sind wahrscheinlich die Verwendung von Messaging nicht korrekt berücksichtigen.

Geben Sie eine MOM-Instanz Mit (ob ActiveMQ, RabbitMQ oder jede andere MOM Broker) auf einer Eins-pro-Verbraucher Fall nicht wirklich Sinn konzeptionell machen. Vielmehr ist es am besten Ihr MOM-Broker als Router von Nachrichten zu denken.

In diesem Fall würden Sie eine ActiveMQ Broker-Instanz haben (die sharded oder auf andere Weise skaliert sein könnte, wenn Sie Probleme haben, Skalierung oder repliziert, wenn Sie HA Überlegungen haben), die alle Hersteller und alle Verbraucher eine Verbindung zu. Dann werden alle XML geht an den gleichen Broker-Instanz, und alle Verbraucher aus dem gleichen Broker-Instanz lesen. In diesem Fall wird der Broker bestimmen, welche Verbraucher sollte die Nachricht basierend auf irgendwelche Heuristik geht sie verwendet.

Das bedeutet auch, dass Sie dynamisch Produzenten und Konsumenten hinzufügen und entfernen können, und nichts jemals ändert. Sie alle den gleichen Makler verbinden, so können Produzenten und Konsumenten als Laständerungen hinzuzufügen und zu entfernen oder als Systeme versagen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top