2016-07-13 14 views
0

Wenn ich mehr als eine @JmsListener-Methode in einer Spring Boot-Anwendung habe gibt es eine Möglichkeit, explizit entweder Listener zu deklarieren, alle Nachrichten aus der Warteschlange vor dem anderen zu konsumieren?Konfigurieren der Reihenfolge der JmsListener-Ausführung

Mit anderen Worten, wenn ich

@JmsListener(destination = "queueOne") 
    public void processOrder1(String message) {. . .} 

@JmsListener(destination = "queueTwo") 
    public void processOrder2(String message) {. . .} 

haben, ist es Konfiguration zur Verfügung processOrder1() Lauf zum Abschluss haben, schalten Sie ihn aus, dann processOrder2() laufen haben? Oder wird processOrder2() immer nach processOrder1() ausgeführt (was der Debugger vorschlägt)? Oder laufen sie irgendwie unabhängig voneinander?

Wenn sie nicht so konfiguriert werden können, würde ich gerne wissen, warum nicht.

Antwort

1

Nicht mit Konfiguration - jeder Listener erhält seinen eigenen unabhängigen asynchronen Listener-Container.

Sie könnten die Container Fabrik mit autoStartup Satz false konfigurieren und jeden Container programmatisch starten - einen Verweis auf den Behälter aus dem Behälter Register erhalten die id Attribut des Zuhörers mit und start()/stop() es.

Eine Schwierigkeit ist, wie Sie "wissen" würden, dass der erste seine Arbeit abgeschlossen hat.

+0

Ich nehme die anfängliche Warteschlangentiefe der Warteschlange, in der sich der Listener befindet, und dekrementiere diesen Wert für jede eingehende Nachricht. Im Idealfall, wenn die Anzahl null ist, muss die verarbeitete Nachricht die letzte sein. So stelle ich fest, dass mein einzelner JmsListener heruntergefahren werden soll. Aber eine Anforderung kam dadurch, dass ich mehr Warteschlangen brauche. –

+0

Also, in der Theorie, wenn ich weiß, dass ein bestimmter JmsListener fertig ist, kann ich mich damit aufhalten und dann im Grunde mit dem nächsten beginnen, den ich gerne ausführen würde? Obwohl ich das asynchrone Bit vielleicht übersehen habe, wenn ich die Frühlingsdokumente durchstöbere ... Das mag auch zu meinem Vorteil funktionieren –