Frage

Ich versuche, Performance-Tests auf ActiveMQ zu implementieren, so hat Setup ein grundlegenden Erzeuger- und Verbraucher Nachrichten über eine Warteschlange zu senden und zu empfangen. Ich habe ein Produzent ohne Probleme erstellt, bekommen sie eine bestimmte Anzahl von Nachrichten an die Warteschlange zu schreiben:

 for(int i = 0; i < numberOfMessages; i++){
                try{
                    String message = generateText(sizeOfMessage);
                    produceMessage(message);
                }
                catch (Exception e) {
                    logger.error("Caught exception while sending message", e);
                }
            }

Dies wird fortgesetzt, ohne Probleme bis zur Fertigstellung und ich habe dies auf der Admin-Website mit Kontrollen bestätigt, dass die richtige Anzahl von Nachrichten anstehen.

Das Problem tritt auf, wenn ich versuche, die Nachrichten aus der Warteschlange zu empfangen. Mit einem einfachen Verbraucher aus der Warteschlange zu lesen, wird es eine verschiedene Anzahl von Nachrichten aus der Warteschlange lesen, aber dann stoppt, wenn sie versucht eine der Nachrichten zu empfangen. Ich kann sehen, dass es immer noch Nachrichten in der Warteschlange gelesen werden, aber der Kunde nicht eine der Botschaften weitergegeben Fortschritte. Ich bin eine einfache Methode, mit den Nachrichten empfangen:

Message message = jmsTemplate.receive();

und es funktioniert für einige Nachrichten (etwa 20-30), aber dann nur Schleusen. Es wurde mir vorgeschlagen, dass einige der Zeichen in der Nachricht ein Escape-Zeichen sein kann (ich war eine zufällige Zeichenfolge unterschiedlicher Länge verwendet wird, aufgrund dieser nur einen Leistungstest zu sein, das Senden von Inhalten nicht wirklich über) so änderte ich alle Nachrichten zu derselben Saite, die eine Wiederholung der char ist ‚2‘ und immer noch ohne Erfolg. Ich verwende Spring-Konfiguration aller Komponenten zu laden, benötigt, um die ActiveMQ Warteschlange zuzugreifen, und die Warteschlange auf meinem localhost ausgeführt wird.

War es hilfreich?

Lösung

Nicht viele Ansichten über diese noch nicht, aber für die Zukunft, wenn jemand das gleiche Problem hat, ich habe die Lösung gefunden. Die Konfiguration für activeMQ die Größe des Speichers von den Sendern und Empfängern verwendet begrenzt, bevor sie nach unten, die Standardwerte gegeben mir verlangsamt waren:

<systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="20 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb" name="foo"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

Ich entfernte diese Konfiguration vollständig und jetzt funktioniert es einen Traum. Ich bin Durchführung Performance-Tests, so dass Sie mögen in Ihre eigenen Einschränkungen setzen, aber das war auf jeden Fall die Ursache meiner Probleme!

Andere Tipps

Es ist ein klassisches Problem mit Messaging; was mit langsamen Verbraucher zu tun. FWIW neuere ActiveMQ Versionen wie 5.2 ermöglicht es Ihnen, auf die Festplatte spulen, anstatt Hersteller blockiert, wenn der Speicher leer wird

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