ActiveMQ-Standalone-Serverbereitstellung oder eingebettet in eine Spring Webapp

8

Ich habe eine Anforderung, eine Anwendung zu entwerfen, die benachrichtigt / veröffentlicht, ihre Subsysteme, um E-Mails zu senden. Ich habe geplant, das mit jms publish / subscribe (topic) Nachrichten

zu tun

Die Sichtbarkeit für den Moment, es gäbe 20 bis 30 Abonnenten und die Anzahl der Nachrichten, die veröffentlicht würden, würde im Bereich von 30000 bis 50000 Nachrichten pro Tag liegen.

Ich habe geplant, ActiveMQ JMS + Spring 3 + Tomcat 6-Implementierung zu verwenden Fragen

  
  1. Ich bin ziemlich neu in JMS, ich würde gerne wissen, ob die oben genannte Last hoch ist?

  2.   
  3. Brauchen wir wirklich ein separates ActiveMQ, das auf einem Server bereitgestellt wird, oder reicht es aus, dass wir ein eingebettetes ActiveMQ in der Webanwendung verwenden?

  4.   
  5. Was sind die Vorteile / Nachteile von separaten ActiveMQ Server / Embedded One?

  6.   
    
Sudhakar 22.06.2012, 13:32
quelle

2 Antworten

7

Erstens, Ihr Nachrichtenvolumen ist ziemlich klein, wie die Dinge gehen. Sie könnten wirklich beide verwenden und was am einfachsten zu pflegen ist würde wahrscheinlich Ihre Wahl diktieren.

Erweitern auf Petter's Kommentar zu Neustarts ist eine Sache zu prüfen, ist die Anzahl der anderen Maschinen, die mit dem Broker verbunden werden.

Kunden

Wenn 100 Computer mit dem Broker verbunden sind, werden bei jedem Neustart von Tomcat mit eingebettetem ActiveMQ 100 Verbindungen unterbrochen, die alle erneut verbunden werden müssen. ActiveMQ unterstützt das Wiederverbinden, kann also gut funktionieren, aber es kann eine unnötige Verzögerung beim Nachrichtenfluss verursachen, während alle wieder verbunden werden und manchmal ein paar Clients die Verbindung nicht wiederherstellen können und Sie sie manuell in Aktion treten müssen.

Mit einem Standalone-Broker und sagen Sie 100 Clients, können Sie Ihren Tomcat-Server beliebig oft neu starten und nur die eine Verbindung vom Broker zu Tomcat brechen. Das kann sehr nett sein.

Wenn Sie nur einen Client haben - den Tomcat-Server selbst - dann gehen Sie mit der Hand in den Embedded-Modus und verwenden den in-vm-Transport.

Speicher

Ein weiterer Faktor ist das Gedächtnis. Wir verwenden ActiveMQ in Amazon EC2 auf einem t1.micro, das nur 613MB Speicher hat, der ziemlich klein ist. Es ist billiger, zwei t1.micros (eine für ActiveMQ und eine für Tomcat) als eine m1.small, die beide hat.

Aber wieder ist die Anzahl der Clients ein Faktor. Wenn es keine anderen Clients als Tomcat gibt, ist es wahrscheinlich viel besser, eine m1.small auszuführen und alles in derselben VM zu behalten.

FYI

Wenn Tomcat und ActiveMQ Ihre primären Ziele sind, sollten Sie Apache TomEE Plus in Betracht ziehen, das ist Tomcat mit ActiveMQ bereits integriert.

Alle Jars sind dort, alles wird standardmäßig mit einem eingebetteten ActiveMQ-Broker eingerichtet, der den lokalen Transport nutzt, von dem Petter spricht. Sie können es auch so konfigurieren, dass es auch einen eigenständigen ActiveMQ-Broker verwendet. Es hat auch JavaMail eingebaut, das klingt, als könnte es für Sie nützlich sein.

Sie können also den Setup-Teil überspringen und direkt mit dem Schreiben Ihrer App beginnen. Wenn Sie beispielsweise dieses einzelne Servlet erstellen und es in einen Krieg mit keinen anderen Gläsern oder Klassen einfügen würden, würde es funktionieren:

%Vor%

Hier ist auch ein Erste-Schritte-Video , das die Einrichtung in Eclipse über den Tomcat-Adapter zeigt.

    
David Blevins 23.06.2012, 19:35
quelle
4

Wenn die Last hoch ist oder nicht, ist schwer zu sagen. Es hängt wirklich von der Größe der Nachrichten und wenn Sie persistente Nachrichten und Transaktionen verwenden oder nicht. Angenommen, sie sind nur ein paar 10KB, Sie sollten mit einem Server gut sein.

Die Frage der Einbettung gegen Stand-alone ist eine große Frage. Lassen Sie mich ein paar Vorteile / Nachteile aufstellen, über die ich nachdenke.

Stand alone: Pro-Standalone:   - Wenn Sie andere Anwendungen als Ihre Spring-App haben, die ActiveMQ verwenden, würde sich ein Neustart Ihrer Anwendung auch auf ActiveMQ auswirken. Dies scheint jedoch hier nicht der Fall zu sein.

  • Umgekehrt könnten Sie die ActiveMQ-Installation aktualisieren, ohne die Federanwendung zu wechseln, wenn die Betriebszeit kritisch ist.

Nachteile Standalone:  - Mehr zu überlegen (eine andere Installation) zu überwachen, zu bedienen usw.

Ich mag die eingebettete Lösung, wenn diese sowieso eine Anwendung ist. ActiveMQ ist großartig einzubetten. Wenn Ihre Anwendung skaliert werden muss, können Sie einfach einen anderen Server mit Ihrer Spring-App starten. und cluster die ActiveMQ-Instanzen mit einer Zeile von XML, und los geht's.

Ein weiteres Pro für die eingebettete Lösung ist, dass der Transport zwischen Spring und ActiveMQ JVM-intern sein kann, so dass Meldungen nicht durch den TCP / IP-Stapel wandern, sondern eine Speicherkopie. Das beschleunigt Ihre Bewerbung.

    
Petter Nordlander 22.06.2012 14:35
quelle