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?
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.
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
.
Das würde natürlich auch funktionieren, wäre aber mehr Arbeit, mehr Informationen dazu finden Sie in der Dokumentation der @EnableJms
Annotation .
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:
Tags und Links spring spring-jms