Message Queue



  • Hallo,

    ich habe eine eher konzeptionelle Frage, und zwar muss ich in der Arbeit einen Prototyp bauen. Es wird eine Client-Server-Konstruktion, die folgendes mach:

    Der Client auf div. Maschinen sendet alle 60 Sekunden einen Wert a la "i'm alive" an den server und dieser verarbeitet diese Meldungen. Da der Server eigentlich nichts von den Clients weiß, außer das er Meldungen von ihnen erhält, den Clients aber ab und zu auch Statuscodes retour schicken soll, möchte ich mit Websockets arbeiten, um eine bidirektionale Verbindung herzustellen. Weiters sollen alle Statuscodes mit einer bestimmten Signatur an einen speziellen Client weiter gereicht werden, weil diese ein Eingreifen des Servicetechnikers notwendig machen.

    Da es momentan ca. 100 Maschinen sind, diese aber noch mehr werden können, möchte ich diese Statusmeldungen der Clients irgendwie auffangen und dann auswerten.

    Soviel zum Background, jetzt meine Frage, wie fängt man diese Nachrichten am besten ab?

    Ich stelle mir das so vor:

    Statuscode kommt an --> Thread starten --> Statuscode darin auswerten --> event. Rückmeldung an den Client --> Thread beenden.

    Und das für jede eingehende Nachricht. Ist dieser Ansatz brauchbar? Oder gibt es elegantere Wege soetwas zu lösen?

    Für die spziellen Nachrichten, die an den Servicetechniker gesendet werden:

    Was passiert wenn der Servicetechniker gerade nicht online ist, oder sonstwas mit dem Service-Client nicht passt. Dann muss ich diese speziellen Nachrichten irgendwie "zwischenspeichern". Sobald die Verbindung wieder steht, sollen die Nachrichten weiterverarbeitet werden. Wie baut man so eine Message Queue? Lasse ich da einen Endlos-Thread laufen, der einfach sammelt und bei bestehender Verbindung die Nachrichten weiterleitet?

    Bezüglich vorhandener Message Broker a la ZeroMQ, es muss leider mit Websockets funktionieren, und soll nur eine kleine Lösung sein.

    Danke!

    Grüße,
    Herbert



  • Und das für jede eingehende Nachricht. Ist dieser Ansatz brauchbar?

    Warum fuer jede Nachricht einen eigenen Thread starten? Warum ueberhaupt Threads? Wie gross sind denn die Nachrichten?

    Bezüglich vorhandener Message Broker a la ZeroMQ, es muss leider mit Websockets funktionieren, und soll nur eine kleine Lösung sein.

    So als ob man nur mit der Nasenspitze die Tastatur bedienen darf. Ich wuerde ZeroMQ nehmen, da bei Netzwerkkommunikation verdammt viel schief gehen kann. Der Message broker nimmt dir hier sehr viel Arbeit ab.

    Was passiert wenn der Servicetechniker gerade nicht online ist, oder sonstwas mit dem Service-Client nicht passt

    Nachrichten werden auf einem oder mehreren zentralen Server/Datenbank zwischengespeichert. Service-Clients holen Nachrichten aktiv ab.



  • Hi,

    danke für die Antworten.

    Warum fuer jede Nachricht einen eigenen Thread starten? Warum ueberhaupt Threads? Wie gross sind denn die Nachrichten?

    Momentan nur Statuscodes (z.b. 0x7753f4f3), das soll aber, bei einem positiven Test, ausgebaut werden, sodass event. Log Files mitgesendet werden können.

    So als ob man nur mit der Nasenspitze die Tastatur bedienen darf. Ich wuerde ZeroMQ nehmen, da bei Netzwerkkommunikation verdammt viel schief gehen kann. Der Message broker nimmt dir hier sehr viel Arbeit ab.

    Die Bedingung ist leider, das WebSockets verwendet werden sollen, was laut meinen Recherchen ZeroMQ nicht kann, auch der Fork nanomsg kann das nicht.

    Daher war das Bestreben, die Nachrichten selbst in Empfang zu nehmen und zu verarbeiten.

    Gibt es event. Message Broker, die mit WebSockets umgehen können?



  • Ist jetzt die Frage woher die Anforderung WebSockets kommt. Da es sich um ein Applikationsprotokoll handelt, kann es natuerlich ueber das Middleware-Protokoll von ZeroMQ transportiert werden.



  • Kannst du nicht ganz unabhängig von der Übertragung einfach alle Nachrichten in ne queue aufnehmen? Wenn es nur was keines ist, und es nicht viele Fehler gibt geht das vllt.
    Dann jeh nach Auswertung alle Fehler loggen und das gesamte Protokoll zur Verfügung stellen?

    Nur ne Idee zwischen Tür und Angel ^^



  • Hallo!

    RabbitMQ kann WebSockets nutzen. Siehe http://www.rabbitmq.com/blog/2012/02/23/how-to-compose-apps-using-websockets/

    Vielleicht wäre das ja was!
    Meine Erfahrungen mit RabbitMQ sind sehr gut, allerdings habe ich bisher nur die "Grundversion" ohne besondere Plugins genutzt.



  • @knivil

    Ist jetzt die Frage woher die Anforderung WebSockets kommt.

    Die Anforderung kommt vom Projektmanagement und von Vorgesetzten, also muss ich das als göttliches Wort auffassen... 😃

    @Student___

    Danke, das werde ich mir mal ansehen. Ich kenne Erlang zwar nicht, hoffe aber das es was robustes ist.


Log in to reply