Spring 4.1 @JmsListener Konfiguration

Ich würde gerne die neuen Beschriftungen und features in Spring 4.1 für eine Anwendung benötigt, die eine JMS-listener.

Ich habe sorgfältig Lesen Sie die Hinweise in der Spring 4.1 JMS Verbesserungen posten aber ich weiterhin zu übersehen, die Beziehung zwischen @JmsListener und vielleicht die DestinationResolver und wie würde ich das setup der Anwendung zu zeigen die richtige Destination oder Endpoint.

Hier ist die vorgeschlagene Verwendung von @JmsListener

@Component
public class MyService {

    @JmsListener(containerFactory = "myContainerFactory", destination = "myQueue")
    public void processOrder(String data) { ... }
}

Nun, ich kann nicht verwenden Sie diese in meinem eigentlichen code, da die "myQueue" muss gelesen werden aus einer Konfigurationsdatei mit Environment.getProperty().

Kann ich setup eine entsprechende myContainerFactory mit einem DestinationResolver aber meistens, es scheint, Sie würden nur verwenden DynamicDestinationResolver wenn Sie nicht brauchen, JNDI-lookup einer Warteschlange in einem app-server, und nicht tun müssen, einige benutzerdefinierte Antwort-Logik. Ich bin einfach nur versuchen zu verstehen, wie der Frühling will mir bitte den Namen der Warteschlange in einer parametrisierten Mode mit der @JmsListener annotation.

Weiter unten auf der blog-post, ich finde einen Verweis auf diese Configurer:

@Configuration
@EnableJms
public class AppConfig implements JmsListenerConfigurer {

@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
    registrar.setDefaultContainerFactory(defaultContainerFactory());

    SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
    endpoint.setDestination("anotherQueue");
    endpoint.setMessageListener(message -> {
        //processing
    });
    registrar.registerEndpoint(endpoint);
}

Nun, das macht eine gewisse Menge an Gefühl und ich konnte sehen, wo das würde mir erlauben, ein Ziel einstellen zur Laufzeit aus einer externen string, aber das scheint im Konflikt mit @JmsListener wie es zu sein scheint überschreiben der annotation zu Gunsten von endpoint.setMessageListener im code oben.

Irgendwelche Tipps geben die entsprechenden queue-Namen mit @JmsListener?

Indem Sie einen Platzhalter verwenden. destination="${name.of.your.property}".
Ich würde lieber nicht verwenden PropertyPlaceHolderConfiguration zu Gunsten von Environment.getProperty aber klar kann ich nicht nehmen, die route als parameter an eine annotation.
Tatsächlich werden Sie eine PropertySourcePlaceHolderConfigurer was im Grunde das gleiche wie Environment.getProperty tut (es berät alle PropertySources. Können Sie erläutern, warum Sie lieber die Environment.getProperty über den Platzhalter, in diesem Fall?
Und warum sollte ein @PropertySource würde nicht funktionieren mit einem Platzhalter? Es funktioniert auf die gleiche. Der einzige Unterschied ist, dass Sie brauchen, um eine PropertySourcesPlaceHolderConfigurer. Also, die Tatsache, mit einem Platzhalter, bedeutet nicht, dass Sie nicht verwenden können @PropertySource mehr.
Ich bin +1 mit @M. Deinum hier und wäre interessiert zu verstehen, was das Problem mit Platzhalter.

InformationsquelleAutor TemarV | 2014-09-17

Schreibe einen Kommentar