Comment publiez-vous un sujet JMS avec Spring JMS?
J'ai un composant qui envoie des messages d'une file d'attente pour être manipulé par un autre système. Il doit également publier un sujet sur les statuts de travail à chaque fois dans un tout. Puis-je utiliser le même JmsTemplate utilisé pour envoyer à une file d'attente ET de publier sur un sujet?
J'ai créé un nouveau sujet dans ActiveMQ, sauf que lorsque j'envoie à partir de JmsTemplate un message, une nouvelle file d'attente avec le nom de la rubrique est créée, avec le message envoyé (au lieu d'envoyer les données vers le sujet), ce que je fais mal?
voici ma config:
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="exceptionListener" ref="jmsExceptionListener" />
<property name="sessionCacheSize" value="100" />
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory" />
</bean>
<bean id="messageFacade" class="org.foo.MessageFacadeJms">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
MessageFacadeJms est la classe que j'utilise pour envoyer un message d'attente (et ça marche), je peux aussi juste utilisé que pour publier un sujet?
Puis-je l'utiliser pour faire la file d'attente d'envoi de sujet et de l'édition?:
jmsTemplate.convertAndSend("TOPIC_NAME" /* or queue name */, message);
source d'informationauteur wsb3383
Vous devez vous connecter pour publier un commentaire.
Cela peut sembler un peu étrange, vous devez dire à JmsTemplate que c'est un sujet plutôt que sur une file d'attente, par l'établissement de ses
pubSubDomain
propriététrue
.Qui signifie que vous allez avoir besoin de deux
JmsTemplate
les haricots, l'un pour la file d'attente, et l'autre pour le sujet:Si vous créez la destination comme un printemps bean plutôt que d'utiliser le nom de destination dans votre code, le Printemps n'aurez pas besoin de savoir s'il s'agit d'un sujet ou d'une file d'attente. Reste la solution proposée ci-dessus devrait fonctionner aussi bien.
AMQ JMS destinations peuvent être créés directement par l'instanciation:
ou chercher à partir de JNDI:
Je préfère le JNDI de la technique, il est plus standard.
Si c'est ok pour vous d'utiliser une convention de nommage pour la file d'attente/de sujets, alors vous pouvez mettre en œuvre une coutume
org.springframework.jms.support.destination.DestinationResolver
et de référence à l'aide de
JmsTemplate.setDestinationResolver