2 Stimmen

Spring MessageListener mehrere Nachrichten

Ich implementiere eine Spring MessageListener die eine JMS-Warteschlange abhört, um Nachrichten mit XML zu verarbeiten.

Meine Bohne VorschlagSOAListener wird etwa 5 oder mehr XML-Nachrichten aus der Warteschlange verarbeiten. Mein Code ist unten.

Gibt es eine Möglichkeit, verschiedene Methoden für diese Klasse anzugeben, um verschiedene XML-Nachrichten zu behandeln?

public class ProposalSOAListener implements MessageListener {

    public void onMessage(Message message) {

        if (message instanceof TextMessage) {
            try {
                System.out.println(((TextMessage) message).getText());
            } catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
        else {
            throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }

} // end of ProposalSOAListener class

3voto

Al Baker Punkte 544

Ihre Frage wirft eine ganze Reihe von architektonischen Fragen auf. Möchten Sie, dass dieser Mesasge Listener die Arbeit erledigt, oder diese an eine andere Komponente weitergeben? Sind transaktionale Überlegungen im Spiel? Haben Sie Speicherbeschränkungen - d.h. wollen Sie eine streamingbasierte XML-Verarbeitung oder nicht? Ist

Die gute Nachricht ist, dass Ihnen im Frühjahr viele Teile dieses Puzzles zur Verfügung stehen.

Ein einfacher nächster Schritt wäre die Verwendung von Spring Object XML Marshalling (OXM), die Auswahl einer der Techniken und die Einbindung des Marshallers in Ihre Listener-Bean.

Voir http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/oxm.html

Eine andere Technik wäre, die Spring ApplicationEvent-Schnittstelle zu verwenden, die eingehenden Nachrichten aus der Warteschlange zu lesen und sie intern an Listener der spezifischen Typen zu veröffentlichen. Dies könnte in Kombination mit dem oben beschriebenen Objektmarshalling verwendet werden.

Zu guter Letzt, wenn es sich um SOAP-Webdienste handelt, können Sie einen Blick auf Spring WS werfen. Es verwendet ähnliche Nachrichtencontainer, um Nachrichten aus der Leitung zu ziehen, sie zu marshallieren und einen Spring WS-Endpunkt aufzurufen (d.h. die Dienstschnittstelle, die diesen Schnittstellenvertrag erfüllt).

http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#d4e907

1voto

Biju Kunjummen Punkte 47456

Projekt Spring Integration ist für diese Art von Problem sehr zu empfehlen. Im Wesentlichen müssen Sie ein JMS-Inbound-Gateway implementieren, um Ihre Nachricht zu erhalten. Sie können diese dann an dieser Stelle in ein Objekt umwandeln und die Nachricht dann an die entsprechende Service-Aktivator-Komponente weiterleiten, die Ihrer Instanz und Methode zugeordnet werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X