@JmsListener Verwendung für Publish-Subscribe-Thema

8

Ich versuche, ein Beispiel für Publish-Subscribe basierend auf @ JmsListener Annotation zu erstellen: Ссылка

Relevante Code-Snippets:

%Vor%

Das Problem ist, dass dieses Verhalten auftritt:

%Vor%

Aber jede Nachricht sollte von beiden Listenern nach Definition von Themen konsumiert werden. Was vermisse ich?

    
luboskrnac 17.05.2015, 19:15
quelle

2 Antworten

21

Bei Verwendung von @JmsListener wird ein DefaultMessageListenerContainer verwendet, das sich erweitert JmsDestinationAccessor , bei dem standardmäßig pubSubDomain auf false gesetzt ist. Wenn diese Eigenschaft falsch ist, wird sie in einer Warteschlange ausgeführt. Wenn Sie Themen verwenden möchten, müssen Sie diesen Eigenschaftswert auf true setzen.

Wie Sie Spring Boot Sie können diese Eigenschaft ganz einfach auf "true" setzen, indem Sie der spring.jms.pub-sub-domain die Eigenschaft application.properties hinzufügen und sie auf true setzen.

%Vor%

Bei Verwendung einer @JmsListener es sucht nach einer jmsListenerContainerFactory benannte Bean, wenn diese nicht verfügbar ist, wird eine Standard-Bean erwartet. Sie können auch eine eigene Bean einfügen und diese Eigenschaft programmatisch unter yo true .

festlegen %Vor%

Das würde natürlich auch funktionieren, wäre aber mehr Arbeit, mehr Informationen dazu finden Sie in der Dokumentation der @EnableJms Annotation .

    
M. Deinum 18.05.2015, 06:51
quelle
4

Das Umschalten des Standardzieltyps von @JmsListener von Queue auf Topic kann vollständig in Java erfolgen, ohne die Eigenschaften zu ändern oder XML zu verwenden.

Der Spring Guide enthält ein Beispiel für die Anpassung der Standardeinstellungen von DefaultMessageListenerContainer .

Sie müssen eine benutzerdefinierte Bean wie folgt definieren:

%Vor%

Dies kann dann in der mit @JmsListener annotierten Methode verwendet werden:

%Vor%     
ldz 11.04.2017 14:47
quelle

Tags und Links