L'incorporation de courtier ActiveMQ dans Spring-MVC Tomcat webapp
J'ai un petit Spring MVC webapp (qui intègre ActiveMQ) qui est conçu pour fonctionner dans un local de Tomcat, et de manière fiable message à une file d'attente sur une distance ActiveMQ.
Tout cela est en place, sauf pour le "fiable". Pour le moment, si la distance site tombe en panne, l'envoyer échoue de façon spectaculaire. Mon envoyer config:
<!-- Connection setup -->
<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory"
p:brokerURL="tcp://backend-server-box:61616" />
<bean id="cachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory"
p:targetConnectionFactory-ref="connectionFactory"
p:sessionCacheSize="10" />
<!-- Bean that represents the correct destination on the backend server -->
<bean id="backendDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="jmsQueueName" />
</bean>
<bean id="backendTemplate"
class="org.springframework.jms.core.JmsTemplate"
p:connectionFactory-ref="cachedConnectionFactory"
p:defaultDestination-ref="backendDestination" />
<!-- Bean that sends to the correct destination on the backend server -->
<bean id="simpleSender" class="uk.co.mycompany.client.messaging.SimpleSender">
<property name="jmsTemplate" ref="backendTemplate" />
</bean>
Je pense que j'ai besoin d'un local, la persistance de courtier que le connectionFactory (le premier bean défini ci-dessus), points à, qui est conscient de la distance courtier (JMS à JMS pont?) Si il ya clairement un peu de documentation à traiter avec cela, je serais très heureux d'être signalée, mais j'ai dû bricoler des choses ensemble, surtout à partir de la extrêmement utile BruceBlog. Ou de toute aide directe serait génial.
Grâce
mise à Jour. Quelques corrections:
- Eclipse ne trouve pas l'amq espace de noms correctement. Cette est l'endroit où vous découvrez pourquoi c'est cassé, et c'est une solution facile.
- Comme Miklos dit dans un commentaire ci-dessous, vous avez besoin de la org.osgi.core-4.1.0.jar dans votre webapp lib. Obtenir ce à partir de la ActiveMQ lib/facultatif dossier.
- Vous avez également besoin d'Apache Commons xbean-spring-3.4.jar. Obtenir ici.
Cette guide m'a ouvert les prochains obstacles. C'est parfait, sauf dans quelques endroits les noms d'attributs sont incorrectes (brokername devrait être brokerName, et physicalname devrait être physicalName).
Mise à jour 2. J'ai répondu correctement, ci-dessous. N'a pas besoin de tout cela amq trucs!
Vous devez vous connecter pour publier un commentaire.
C'est la façon de le faire.
Hypothèses
Pré: les espaces de nommage
Vous devez déclarer les espaces de noms suivants:
1. Créer un courtier local:
De sorte que vous êtes à l'aide de la persistance, activé par une propriété, et un Configuration du Broker URI pour configurer réessayer comportement. Vous devez indiquer le nom de chaque file d'attente à distance vous souhaitez vous connecter dans la outboundBridgeQueues liste.
2. Créer broker de connexion usines
Celui-ci se connecte au-dessus d'un courtier:
Puis l'envelopper avec un CachingConnectionFactory (presque toujours un bonne idée):
3. Créer des équivalents locaux de la télécommande destinations
Chaque destination, vous serez en train de parler à maintenant besoin d'une représentation locale:
4. Créer JMS modèles à être câblé dans les haricots
Je vais en faire un pour queue1 ici; queue2 est exactement le même processus:
5. Utiliser JMS modèle
Un exemple de code:
Et vous avez terminé! Pas trop douloureux, mais il a fallu un certain temps pour le faire fonctionner. Espérons que cela aide les gens dans l'avenir; c'est un excellent moyen pour ajouter rapidement persistante de messagerie pour une petite application.
Remarque: ce n'est pas une bonne façon de câbler la classe. Vous seriez probablement passer dans un JMSTemplate de config, donc vous pouvez utiliser la définition d'une classe et d'un grillage en différents modèles pour différentes files d'attente. J'ai juste fait comme ceci pour la vitesse. Il suffit d'utiliser votre Printemps instinct 🙂
Apache Active MQ site web donne un exemple sur la façon d'intégrer un courtier en Printemps: http://activemq.apache.org/spring-support.html et sur la façon de définir un JMS pont: http://activemq.apache.org/jms-to-jms-bridge.html